如何审核我的Windows应用程序以获得正确的Unicode处理?

Bil*_*eal 12 c++ unicode winapi

我不能使用预先打包的Unicode字符串库,例如ICU,因为它们将二进制文件的大小炸成疯狂程度(它是200k程序; ICU是16MB +!).

我已经将内置wchar_t字符串类型用于所有内容,但我想确保在对字符串进行迭代或类似事情时我没有做任何愚蠢的事情.

是否有像Fuzzers这样的工具用于安全性但是用于Unicode?也就是说,在我的代码中将基本多语言平面之外的字符抛出,并确保以UTF-16正确处理事物?

(哦,显然跨平台解决方案可行,但大多数跨平台的东西都必须支持UTF-8和UTF-16)

编辑:还要注意比UTF-16代理对更不明显的东西 - 像重音标记!

Meh*_*dad 2

需要检查的一些事项:

  • 确保WM_CHAR您正在处理的是WM_UNICHAR

    WM_UNICHAR消息与 相同WM_CHAR,只是它使用 UTF-32。它旨在将 Unicode 字符发送或发布到 ANSI 窗口,并且可以处理 Unicode 补充平面字符

  • 不要假设第 i字符位于索引处i。显然不是,如果你碰巧使用这个事实,比如说,将一根绳子分成两半,那么你可能会把它搞砸。

  • 不要仅仅因为字符数组的长度为 N 就告诉用户(在状态栏或其他位置)用户有 N 个字符。

  • @Mehrdad:啊——我现在明白了。`WM_CHAR` 传递单个 `wchar_t`,因此无法传递代理对。(我正在考虑字符串,但如果您传递单个代码点,那就有意义了) (2认同)