Jor*_*nks 3 encoding haskell readfile
在测试文件中,我有以下测试字符串:
?? Test?
Run Code Online (Sandbox Code Playgroud)
我尝试使用和不使用BOM的UTF-8编码文件,并使用UCS-2.我已经尝试将Haskell的编码设置为UTF-8.
文本总是出现(或更糟):
"\8745\9559\9488\920\226\191\920\237\8359 Test\960\199\232"
Run Code Online (Sandbox Code Playgroud)
每当我键入打印"?" 的代码"\12298",而不是\960\199\232从FILEREAD所见.
这种行为的解决方案?
猜测:您正在使用readFile或类似,并且正在使用非UTF8,非UCS2语言环境.您可以通过设置从中读取的内容的编码(文件句柄)并显式写入(stdout或其他)来解决问题.例如,以下程序可以正确地为我正确读取和写入测试文件:
import System.IO
main = do
hSetEncoding stdout utf8
withFile "test.txt" ReadMode $ \h -> do
hSetEncoding h utf8
s <- hGetContents h
print s
putStr s
Run Code Online (Sandbox Code Playgroud)
另一种选择是使用适当的语言环境运行现有程序; 例如,尝试:
LANG=en_US.utf8 runhaskell test.hs
Run Code Online (Sandbox Code Playgroud)
在最常用的现代shell中,这将为LANG程序的单次运行适当地设置环境变量test.hs.
| 归档时间: |
|
| 查看次数: |
141 次 |
| 最近记录: |