如何从字符串字符中返回unicode 8字节值

问题描述:

我试图返回通常不是英语的字符串字符的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

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

然后,我将生成的十六进制与规范报告进行比较。

我认为你可以将您的字符串转换为字节数组,其中,看起来像在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