这个问题在这里已经有了答案:
How to convert Unicode Escape Sequence to Unicode String in Haskell
(1 个回答)
3年前关闭。
当我运行程序时,我看到以下内容:
λ ashot Weather → λ git master* → stack exec Weather-exe
Пожалуйста, укажите дату для прогноза в формате ГГГГ-ММ-ДД:
2018-11-07
Пожалуйста, укажите один из этих марзов: [Aragatsotn,Ararat,Armavir,Dilijan,Gegharkunik,Gyumri,Kotayk,Shirak,Syunik,Vanadzor,Yerevan]
Yerevan
一切正常。
但是当我输入错误时,我明白了:
InvalidDate "\1058\1077\1082\1089\1090, \1082\1086\1090\1086\1088\1099\1081 \1074\1099 \1074\1074\1077\1083\1080 - \1101\1090\1086 \1082\1072\1082\1072\1103-\1090\1086 \1073\1077\1083\1080\1073\1077\1088\1076\1072!"
但不是这些数字 1072/1052 ...我应该收到俄文文本。
如何解决此问题以便正确显示俄语字符?
最佳答案
您可能正在调用 show
在弦上。这也可能隐含地发生,例如通过 print
,或者通过要求 GHCi 打印一个字符串。
考虑这个 GHCi session :
> str = "Пожалуйста"
> str
"\1055\1086\1078\1072\1083\1091\1081\1089\1090\1072"
变量
str
包含正确的字符串。当我们要求 GHCi 打印它时,它会调用 print str
隐式调用 show
.show
反过来,将字符串转换为 ASCII 转义形式,将所有不可打印的字符转换为转义序列。我强调字符串
str
确实是预期的字符串:如果我们使用 putStrLn
,我们可以正确打印它, 例如:> putStrLn str
Пожалуйста
请注意,如果您调用
show
在包含 String
的数据类型上内部(例如,在 InvalidDate
这样的构造函数内部),然后依次调用 show
在字符串上,产生不需要的转义。我建议为您的类型编写一个自定义的 pretty-print 并使用它,这样字符串就不会被这种转义破坏。
关于ubuntu - 为什么俄语字符显示不正确?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53196301/