Как преобразовать символ в значение Unicode в F # - PullRequest
2 голосов
/ 20 апреля 2011

Я сделал простой ceasar-шифр в javascript, и мне нужно сделать его снова в f #.Я использовал метод charCodeAt () в javascript, чтобы преобразовать отдельные символы в строке в их значение в Юникоде.Кто-нибудь знает, как это сделать в F # или есть команда, подобная charCodeAt?Я искал часы и у меня заканчивается время.

Спасибо

Ответы [ 2 ]

7 голосов
/ 21 апреля 2011

Для обработки кодовых точек вне Базовой многоязычной плоскости, я полагаю, вы захотите использовать 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
5 голосов
/ 20 апреля 2011

Если у вас есть символ, просто конвертируйте его в целое число:

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

Если у вас есть строка, объедините ее с индексатором:

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