Core.Std(ocaml)中特殊字符的奇怪行为

时间:2014-04-26 21:05:20

标签: string ocaml special-characters

我是ocaml的新手,我想知道为什么:(命令行解释器OCaml版本4.01.0)

# open Core.Std;;
# String.lowercase "a";;
- : Core.Std.String.t = "a"
# String.lowercase("è");;
- : Core.Std.String.t = "�"
# String.lowercase "ò";;
- : Core.Std.String.t = "�"

同样的!但是使用普通字符:

# (=) "a" (String.lowercase "a");;
- : bool = true

显然:

# (=) "è" (String.lowercase "è");;
- : bool = false

有人可以解释这种行为吗?

谢谢

1 个答案:

答案 0 :(得分:3)

这肯定是因为您的终端是UTF-8编码的,即您输入的字符串是UTF-8编码的。但是String模块中的函数(至少在官方stdlib中)仅对latin1(ISO-8859-1)编码的字符串起作用。所以你不能指望他们使用UTF-8编码的字符串。

这应该很容易检查:

String.length "é" 

如果这不是1而是2,则输入UTF-8编码的字符串。