我想从控制台读取一个包含特殊字符如ö,ä,ü,µ的字符串。我已经尝试过以下方法:
```haskell do ... ts <- getLine ... ``` 但是它不能正常工作于这些字符。例如,ö的unicode为\246,但如果我使用getLine读入ö,haskell会读入"\195\182",并且putStr "\195\182"会输出ö,而不是ö。问题出在哪里?我需要使用另一个函数来读入这些字符吗?
我在Windows XP上使用WinGHCi 7.0.3。希望有人能帮我解决问题,因为我迄今没有找到任何资料。
@Judah Jacobson: 我再次尝试了一下,在键入任何其他命令之前,我得到了这个结果:
```haskell do ... ts <- getLine ... ``` 但是它不能正常工作于这些字符。例如,ö的unicode为\246,但如果我使用getLine读入ö,haskell会读入"\195\182",并且putStr "\195\182"会输出ö,而不是ö。问题出在哪里?我需要使用另一个函数来读入这些字符吗?
我在Windows XP上使用WinGHCi 7.0.3。希望有人能帮我解决问题,因为我迄今没有找到任何资料。
@Judah Jacobson: 我再次尝试了一下,在键入任何其他命令之前,我得到了这个结果:
Prelude> :m +System.IO
Prelude System.IO> hSetEncoding stdin utf8
Prelude System.IO> getLine
ασδφ
"\206\177\207\402\206\180\207\8224"
Prelude System.IO> putStr "\206\177\207\402\206\180\207\8224"
ασδφPrelude System.IO>
我也尝试了Windows命令 chcp 65001,但它并没有改变任何东西,因为我已经在Windows上激活了utf8。
chcp 65001
,然后再次运行你的Haskell程序,你是否仍然看到这种行为? - n. m.