【发布时间】: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?
-
使用
Encoding和BitConverter也会返回353。为什么你需要154? -
所以 154 处的 Unicode 字符是 Single Character Introducer。一些网站使用
'š'字符作为预览图像,但它是一个控制字符,这意味着它本身没有可见的表示。因此,您可以在char文字中表示它的唯一方法是使用'\u009a'。请注意,353 处的字符是'š'字符,因此如果您在文字中键入该字符,它将为您提供值 353。 -
错误的问题,错误的期望。您已经拥有代表您感兴趣的代码点的正确 UTF-16 编码代码单元。将它与
SendMessage一起使用很可能是您问题的错误解决方案(我认为这是 UI 自动化)。在这种情况下,请使用UI Automation。这就是它的用途。