如何在ocaml中使用Camomile用于UTF8字符串?

时间:2013-04-24 16:09:17

标签: ocaml camomile

我已下载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>

3 个答案:

答案 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)

我想,TörökEdwin告诉了你需要知道的一切。当代码用于处理ASCII C字符串时,UTF-8专门设计为以一系列8位字节存储Unicode值(代码点)的方法。由于OCaml字符串是一系列8位字节,所以存储 UTF-8值没有问题。如果用于创建OCaml源的程序处理UTF-8,那么创建包含UTF-8值的字符串就没有问题。你不需要做任何特别的事情来实现这一点。 (正如我所说,我自己已多次这样做了。)

如果您不需要处理该值,那么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"