ubuntu - 为什么俄语字符显示不正确?

标签 ubuntu haskell terminal

这个问题在这里已经有了答案:





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/

相关文章:

haskell - 我怎样才能对 Reflex Dynamic 中的值进行分支?

parsing - 使用 Haskell/Parsec 转换\"into "

sqlite - 使用 Scotty 和 Sqlite 并在 Monad 方面遇到一些麻烦

python - 忽略 Bash 脚本中 Source 命令的失败

亚搏体育app : add quick-actions in commit comments

windows - 无法在 VirtualBox 上启用多 CPU

python - 在 Ubuntu 14.04 VPS 上部署基本的 Python 3.4 Flask 应用程序

linux - 从路径中提取最后一个斜杠的文件名

javascript - 从外部目录启动 grunt

linux - SSH - 创建的用户的权限被拒绝(公钥)