باستخدام Haskell لإخراج bytestring UTF-8
-
21-09-2019 - |
سؤال
سأخرج من ذهني في محاولة لإخراج بيانات UTF-8 المشفرة إلى وحدة التحكم.
لقد تمكنت من تحقيق ذلك باستخدام String
, ، لكن الآن أود أن أفعل الشيء نفسه مع ByteString
. هل هناك طريقة لطيفة وسريعة للقيام بذلك؟
هذا ما حصلت عليه حتى الآن ، وهو لا يعمل:
import Prelude hiding (putStr)
import Data.ByteString.Char8 (putStr, pack)
main :: IO ()
main = putStr $ pack "čušpajž日本語"
يطبع uapaj~�,�
, ، قرف.
أرغب في إجابة لأحدث GHC 6.12.1 الأفضل ، على الرغم من أنني أرغب في سماع إجابات للإصدارات السابقة أيضًا.
شكرًا!
تحديث: ببساطة قراءة وإخراج نفس خط النصوص المصففة بـ UTF-8 يبدو أنه يعمل بشكل صحيح. (استخدام Data.ByteString.Char8
, ، أنا فقط أفعل putStr =<< getLine
.) لكن القيم المعبأة من داخل ملف .HS ، كما في المثال أعلاه ، ترفض الإخراج بشكل صحيح ... يجب أن أفعل شيئًا خاطئًا؟
المحلول
utf8-string
يدعم bytestrings.
import Prelude hiding (putStr)
import Data.ByteString.Char8 (putStr)
import Data.ByteString.UTF8 (fromString)
main :: IO ()
main = putStr $ fromString "čušpajž日本語"
نصائح أخرى
bytestrings
هي سلاسل البايتات. عندما يتم إخراجها ، سيتم اقتطاعها إلى 8 بتات ، كما يصف في الوثائق Data.ByteString.Char8
. ستحتاج إلى تحويلها بشكل صريح إلى UTF8 - عبر utf8-string
حزمة على Hackage ، والتي تحتوي على دعم للاشترات.
ومع ذلك ، اعتبارًا من عام 2011 ، يجب عليك استخدام text
حزمة ، لإخراج Unicode سريع ، معبأة. GHC اقتطاع إخراج حرف Unicode
يصبح مثالك أكثر بساطة:
{-# LANGUAGE OverloadedStrings #-}
import qualified Data.Text as T
import qualified Data.Text.IO as T
main = T.putStrLn "čušpajž日本語"
مثل ذلك:
$ runhaskell A.hs
čušpajž日本語