【问题标题】:Anybody know a non-ascii encoding?有人知道非ASCII编码吗?
【发布时间】:2025-12-21 08:50:07
【问题描述】:

'1' 使用两个字节 20 和 0; '2' 使用两个字节 21 和 0;

'a' 使用两个字节 68 和 0; 'b' 使用两个字节 69 和 0;

我从 GDI32.dll(windowsapi) 挂钩 func ExtTextOutW ,并从 str(unsigned char) 读取; 比如abc123... while got:68 0 69 0 70 0 20 0 21 0...;

BOOL ExtTextOutW
 (
  HDC         hdc,
  INT         x,
  INT         y,
  UINT        flags,
  const RECT* lprect,
  LPCWSTR     str,
  UINT        count,
  const INT*  lpDx
 )

【问题讨论】:

  • 欢迎来到 Stack Overflow。请阅读the help pagesthe SO tour、阅读how to ask good questions,以及this question checklist。最后,你真正想问的是什么?你有什么问题? “'1' 使用两个字节 20 和 0;'2' 使用两个字节 21 和 0;”是什么意思?等等?
  • 那是UTF-16little-endian,这是Windows内部使用的。除了额外的 0 之外,这些示例与 ASCII 的代码点相同。
  • 我知道 LPCWSTR;如果它是 UTF-16 编码,字符 'a' 同时由两个字节 0 和 97 编码,但这个使用 68 和 0;所以我认为它是不兼容的 ASCII;
  • str(unsigned char) 表示我将其读取为 unsigned char;因为当我通过 UTF16\utf32\GBK 读取 str 时失败。
  • 糟糕,抱歉,是的 - 乍一看,它们看起来就像十六进制一样。我猜它可能是一种字体,其中字符已重新映射到其他代码点,但这很奇怪。

标签: c encoding wchar-t lpcwstr


【解决方案1】:

当标志=0x10;

lpString 数组是指从 GetCharacterPlacement 返回的数组,应该由 GDI 直接解析,因为不需要进一步的语言特定处理。字形索引仅适用于 TrueType 字体,但该标志可用于位图和矢量字体,以指示不需要进一步的语言处理,GDI 应直接处理字符串。请注意,所有字形索引都是 16 位值,即使字符串被假定为光栅字体的 8 位值数组。 对于 ExtTextOutW,字形索引保存到元文件中。但是,要显示正确的字符,必须使用相同的字体播放图元文件。对于 ExtTextOutA,不保存字形索引。

【讨论】:

    最近更新 更多