我已下载Camomile并安装了它,我很乐意使用它。
问题是我应该如何使用它?
在ocaml中,对于默认字符串,我只做let s = "a string";;
但Camomile
是什么?
例如,如果我想构建一个utf8
字符串こんにちは
(日语单词为hello,从google翻译复制),我应该如何使用Camomile
?
修改
据说ocaml
无法支持utf8
,这很有趣,但我尝试了这段代码
let s = "你好";;
let _ = print_string s;print_string "\n";;
它在ocaml中工作。但为什么?? 你好
是一个中文,如果每个人都说ocaml 4.00.1
无法处理utf8
,那么ocaml如何打印并处理它?</ p>
答案 0 :(得分:7)
以下是不同演员的简短介绍:
ASCII是一组字符(其中有127个)和代表它们的代码(7位)。
Unicode是一组字符(有超过127个字符)。
UTF-8是代表unicode字符的代码。
您的终端。它将程序输出的字节解释为UTF-8编码字符,并显示相应的unicode字符。
OCaml进程字节序列(OCaml使用名称char
,但它具有误导性,名称byte
更合适。“
因此,如果OCaml输出与"你好"
的UTF-8代码对应的字节序列,您的终端会将其解释为utf-8字符串并输出你好
。但是对于OCaml,"你好"
只是一个6字节的序列。
答案 1 :(得分:3)
如果您不需要处理该值,那么OCaml I / O函数也可以写出这样的值(或读入一个),如果您的显示器的编码是UTF-8(这是什么)我用),它会正确显示。但大多数情况下,您需要处理您的价值观。如果您将代码更改为(例如)只写出字符串的 length ,您可能会开始明白为什么需要一个特殊的库来处理UTF-8。
如果您想知道为什么某个Unicode字符串表示为UTF-8编码中的某个字节序列,您只需要读取UTF-8。维基百科的文章(UTF-8)可能是一个合理的起点。
答案 2 :(得分:2)
只有当您想要在不同编码之间进行转换,规范化unicode或者您想要访问单个代码点时,才需要使用UTF8库。
OCaml将字符串视为指定长度的8位二进制值,因此您可以直接使用任何编码。 即你可以直接将UTF8值分配给变量:
# let foo = "こんにちは";;
val foo : string =
"\227\129\147\227\130\147\227\129\171\227\129\161\227\129\175"