如何在f#中将char转换为unicode值

时间:2011-04-20 19:38:49

标签: .net unicode f# char

我在javascript中制作了一个简单的ceasar密码,我需要在f#中重新创建它。我在javascript中使用charCodeAt()方法将字符串中的单个字符转换为它们的unicode值。有没有人知道如何在F#中执行此操作或者是否有类似于charCodeAt的命令?我已经找了几个小时,而且我已经没时间了。

由于

2 个答案:

答案 0 :(得分:7)

要处理基本多语种平面之外的代码点,我相信你会想要使用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

要有效地使用此功能,您需要将其与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

答案 1 :(得分:5)

如果您有一个char,那么只需将其转换为整数:

> int 'a';;
val it : int = 97

如果您有字符串,请将其与索引器结合使用:

> int ("xyza".[3]);;
val it : int = 97