【问题标题】:how to return unicode 8 byte value from string character如何从字符串字符返回 unicode 8 字节值
【发布时间】:2013-02-20 16:35:17
【问题描述】:

我正在尝试返回通常不是英语的字符串字符的 2 字节 WORD 十六进制值。基本上是Unicode表示。使用 vb.net

例如:

FF5F = ((

FF06 = &

这些在 unicode 标准 6.2 中表示。我无法显示此集中显示的某些外语字符。

所以想将我的字符串字符转换为这个 2 字节的值。我无法在 .net 中找到执行此操作的函数。

该代码目前只不过是一个循环遍历字符串字符的 for 循环,因此没有示例进度。

我已经尝试过 AscW 和 ChrW 函数,但它们不返回 2byte 值。 ASCII 在 255 以上似乎不可靠。

如有必要,我可以隔离正在测试的可能语言,以便通过比较只考虑一种语言,尽管始终可以使用英文字符。

任何指导将不胜感激。

【问题讨论】:

  • 这些是全角字符,在东亚排版中很常见。像 MS Gothic 这样的字体可以显示它们。目前还不清楚您尝试使用它们做什么,使用 String.ToCharArray() 或仅索引字符串是获取值的简单方法。
  • 并非所有 Unicode 字符都适合 2 个字节。要么您在谈论 UTF-16 代码单元(.NET:System.Char),要么您对大小的假设是错误的。
  • 我指的是此链接中对半角和全角字符的引用,特别是片假名unicode.org/charts/PDF/UFF00.pdf 在本规范中都是 2 个字节。

标签: vb.net unicode


【解决方案1】:

我认为您可以将字符串转换为字节数组,在 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这里偷了这个。

【讨论】:

  • 谢谢,我现在就测试一下。
  • 好吧,代码执行正常,但我没有得到已知字符的预期值。即使将字节转换为十六进制。
  • 看来这个函数只返回基数 255 个字符。它无法识别高于此的 unicode 值。
  • .NET 中有处理 Unicode 的类,其中之一是 Encoding 类。您可能会发现 this article 很有趣。
【解决方案2】:

一位同事协助制定了解决方案。字符串的每个字符都先转换成字符数组,再转换成无符号整数,再转换成Hex。

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

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

【讨论】:

    猜你喜欢
    • 2012-04-21
    • 2011-01-10
    • 2021-03-30
    • 2014-08-16
    • 1970-01-01
    • 2017-04-16
    • 1970-01-01
    • 2012-11-30
    相关资源
    最近更新 更多