1
{-# LANGUAGE OverloadedStrings #-}
import Data.Text.IO
import Data.Text.ICU.Convert
import Prelude hiding (putStrLn)
main = do
conv <- open "utf8" Nothing
putStrLn $ toUnicode conv "h\xffzzah"
該程序嘗試解碼無效的UTF-8字符串;它打印「h zzah」,轉換器用U + FFFD REPLACEMENT CHARACTER替換了無效字節。我寧願它拋出一個異常(例如,Data.Text.ICU.Error.ICUError
)。有沒有辦法讓它這樣做,或者否則報告解碼沒有真正成功?使Data.Text.ICU.Convert.toUnicode報告解碼失敗
另外,是否有不同的方式做Haskell中的字符解碼,它報告這種類型的錯誤?
如果存在U + FFFD信號表示輸入不是有效的utf8字符串,則定義執行轉換的函數,如果結果包含該字符,則會拋出錯誤。 – user2407038
@ user2407038但如果FFFD在源文檔中正確編碼會怎麼樣? –
U + FFFD應該只出現在從「Unicode中未知或無法表示的」字符轉換後的文檔中。所以無論是在您的轉換還是在之前的轉換中發生錯誤。我很難想出一個用例,其中這兩種情況必須以不同的方式處理。 – jsalvata