【问题标题】:Convert specific char to int将特定 char 转换为 int
【发布时间】:2016-12-30 22:15:39
【问题描述】:

我有一个特定的字符“š”,我需要它以 wchar_t 类型表示,表示一个 UTF-16 Unicode 字符,因此我可以将它作为 wParam 和 WM_CHAR 消息提供给 Winapi SendMessage 函数。这个 char 的两字节表示是 byte[] { 97, 1 }

我需要的 int 是 154。但是使用以下代码,我总是得到 353。有什么想法可以得到 154 而不是 353?

char ch = 'š';
byte[] charByte = Encoding.Unicode.GetBytes(ch); // reults in byte[] { 97, 1 }

int charInt = BitConverter.ToInt32(charCode, 0); // results in 353, but 154 is correct

【问题讨论】:

  • (int)'š' 似乎也返回 353。 (int)char.ConvertFromUtf32((int)'š')[0] 也是如此。不完全确定您要如何、为什么以及要完成什么。您是否尝试过仅使用353 并查看您会得到什么?可能会奏效。
  • 为什么要返回 154?
  • 使用EncodingBitConverter 也会返回353。为什么你需要154?
  • 所以 154 处的 Unicode 字符是 Single Character Introducer。一些网站使用'š' 字符作为预览图像,但它是一个控制字符,这意味着它本身没有可见的表示。因此,您可以在 char 文字中表示它的唯一方法是使用 '\u009a'。请注意,353 处的字符是 'š' 字符,因此如果您在文字中键入该字符,它将为您提供值 353。
  • 错误的问题,错误的期望。您已经拥有代表您感兴趣的代码点的正确 UTF-16 编码代码单元。将它与 SendMessage 一起使用很可能是您问题的错误解决方案(我认为这是 UI 自动化)。在这种情况下,请使用UI Automation。这就是它的用途。

标签: c# winapi encoding


【解决方案1】:

您可能正在寻找 Win-1252(不是 Unicode,而是 ANSI 代码页)或类似编码:

 byte result = Encoding.GetEncoding(1252).GetBytes('š'.ToString())[0];

 // 154 
 Console.Write(result);

请注意,您应该解码 string ('š'.ToString()) 而不是 char

【讨论】:

    【解决方案2】:

    353 是 UTF-16 中该字符的正确值。值 154 用于 Windows ANSI 代码页之一。

    【讨论】:

      猜你喜欢
      • 2018-09-05
      • 2012-08-07
      • 1970-01-01
      • 1970-01-01
      • 2011-02-25
      • 2015-11-23
      • 2015-12-18
      • 2017-04-25
      相关资源
      最近更新 更多