2011-04-20 43 views
2

我在JavaScript中做了一個簡單的ceasar密碼,我需要在f#中重新生成它。我使用javascript中的charCodeAt()方法將字符串中的單個字符轉換爲unicode值。有沒有人知道如何在F#中做到這一點,或者是否有類似的命令charCodeAt?我已經找遍了幾個小時,而且我沒有時間了。如何將字符轉換爲unicode值在f#

感謝

回答

5

如果你有一個字符,然後只需將它轉換爲整數:

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

如果你有一個字符串,索引結合這樣的:

> int ("xyza".[3]);; 
val it : int = 97 
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 
相關問題