我想在OCaml中创建一个返回char lambda(UTF8 0x03bb)的函数,但是我不能使用,Char.chr因为它不在ASCII图表中。有办法吗?我是OCaml的新手...
首先请注意,您要混合使用标量值(0..0xD7FF和0xE000 ..0x10FFFF范围内的整数)及其编码(此类整数的字节序列化)。不要说UTF-8 0x03bb,因为它没有任何意义,您要说的是标量值U + 03BB,它是表示Unicode中小lambda的整数。
现在,您已经注意到OCaml char类型不能表示这样的整数,因为它限制为256个值。但是,您可以做的是在OCaml字符串中表示它们的UTF-8 编码,这些字符串是(或更准确地说是)任意字节的序列。对于U + 03BB,其UTF-8序列化是字节序列,0xCE 0xBB因此您可以编写:
let lambda = "\xCE\xBB"
Run Code Online (Sandbox Code Playgroud)
如果您希望直接处理标量值,则可以使用UTF-8编码器,例如Uutf(免责声明,我是作者),例如:
let lambda = 0x03BB
let lambda_utf_8 =
let b = Buffer.create 5 in
Uutf.Buffer.add_utf_8 b lambda; Buffer.contents b
Run Code Online (Sandbox Code Playgroud)
有关Unicode的简短复习和有关如何在OCaml中处理Unicode的一些偏见,您可以查阅此最小的Unicode简介。
更新
从OCaml 4.06开始,文字字符串支持Unicode转义。以下UTF-8对lambda字符串中的lambda字符进行编码:
let lambda = "\u{03BB}"
Run Code Online (Sandbox Code Playgroud)