要处理基本多语言平面之外的代码点,我相信你会想要使用System.Char.ConvertToUtf32
,例如
let input = "\uD800\uDC00\u0061\u0300\u00C6"
System.Char.ConvertToUtf32(input, 0) //gives 65536, which is good
int input.[0] //gives 55296, not what you want
Run Code Online (Sandbox Code Playgroud)
要有效地使用它,您需要将其与帮助相结合System.Globalization.StringInfo
,否则,例如,如果您尝试System.Char.ConvertToUtf32(input, 1)
上面的示例,您将获得异常.就像是,
open System.Globalization
let si = StringInfo(input)
let teArr = Array.init si.LengthInTextElements (fun i -> si.SubstringByTextElements(i,1))
System.Char.ConvertToUtf32(teArr.[0], 0) //65536
System.Char.ConvertToUtf32(teArr.[1], 0) //97
System.Char.ConvertToUtf32(teArr.[2], 0) //198
Run Code Online (Sandbox Code Playgroud)
如果你有一个char,那么只需将其转换为整数:
> int 'a';;
val it : int = 97
Run Code Online (Sandbox Code Playgroud)
如果您有一个字符串,请将其与索引器结合使用:
> int ("xyza".[3]);;
val it : int = 97
Run Code Online (Sandbox Code Playgroud)