2013-02-20 104 views
0

我試圖返回通常不是英語的字符串字符的2字節WORD十六進制值。基本上是Unicode的表示。用vb.net如何從字符串字符中返回unicode 8字節值

例:

FF5F =((

FF06 = &

這些在Unicode標準6.2代表我沒有顯示某些外語的能力。在這個集合中顯示的字符

所以想要我的字符串字符被轉換爲這個2字節的值我沒有能夠在.net中找到一個函數來做到這一點

該代碼目前只不過是一個循環遍歷字符串的循環,所以沒有示例進度。

我已經嘗試了AscW和ChrW函數,但它們不返回2byte值。 ASCII在255以上看起來似乎不可靠。

如有必要,我可以隔離正在測試的可能語言,以便通過比較只考慮一種語言,儘管總是可以使用英文字符。

任何指導,將不勝感激。

+0

這些是全角字符,在東亞版式中很常見。像MS Gothic這樣的字體可以顯示它們。你很難清楚你用它來做什麼,使用String.ToCharArray()或者只是索引字符串是一種獲取值的簡單方法。 – 2013-02-20 17:08:40

+0

並非所有Unicode字符都適合2個字節。無論你是在談論UTF-16代碼單元(.NET:System.Char)還是你對大小的假設都是錯誤的。 – 2013-02-21 10:27:03

+0

我指的是這個鏈接中的半角和全角字符的引用,特別是片假名http://www.unicode.org/charts/PDF/UFF00.pdf,在本規範中都是2字節。 – htm11h 2013-02-21 13:23:19

回答

0

collegaue協助開發解決方案。字符串的每個字符都轉換爲字符數組,然後轉換爲無符號整數,然後轉換爲十六進制。

lt = myString 
Dim sChars() As Char = lt.ToCharArray 

For Each c As Char In sChars 
    Dim intVal As UInteger = AscW(c) 
    Debug.Print(c & "=" & Hex(intVal)) 
Next 

注意AscW函數... AscW返回輸入字符的Unicode代碼點。這可以是0到65535.返回的值獨立於當前線程的區域性和代碼頁設置。 http://msdn.microsoft.com/en-us/library/zew1e4wc(v=vs.90).aspx

然後,我將生成的十六進制與規範報告進行比較。

0

我認爲你可以將您的字符串轉換爲字節數組,其中,看起來像在C#:

static byte[] GetBytes(string str) 
{ 
    byte[] bytes = new byte[str.Length * sizeof(char)]; 
    System.Buffer.BlockCopy(str.ToCharArray(), 0, bytes, 0, bytes.Length); 
    return bytes; 
} 

從,你可以只搶兩個首字節從陣列中,有你去吧,你有他們。

如果你想在屏幕上顯示它們,我想你應該將它們轉換爲十六進制或一些這樣的可顯示格式。

我從question這裏偷了這個。

+0

謝謝,我現在就來測試一下。 – htm11h 2013-02-20 16:42:09

+0

好吧,代碼執行正常,但我沒有得到已知字符的期望值。即使在將字節轉換爲十六進制之後。 – htm11h 2013-02-20 16:53:19

+0

看來,這個函數只返回基本的255個字符。它不認可超過此值的unicode值。 – htm11h 2013-02-20 17:06:02