【发布时间】:2011-10-03 21:28:33
【问题描述】:
假设我有一个接收字节数组的函数:
void fcn(byte* data)
{
...
}
有人知道 fcn() 确定 data 是 ANSI 字符串还是 Unicode 字符串的可靠方法吗?
请注意,我故意不传递长度参数,我收到的只是指向数组的指针。长度 arg 会很有帮助,但我没有收到它,所以我必须不用它。
这篇文章提到了一个显然可以做到的 OLE API,但他们当然不会告诉你哪个 api 函数:http://support.microsoft.com/kb/138142
【问题讨论】:
-
没有可靠的方式,但IsTextUnicode可能就是这个意思。
-
你知道它包含一个非零长度的字符串吗?您是否知道读取几个字节通过刺尾的事实并不致命?我认为答案显然是不存在任何可靠的方法。有些字符串既是有效的 ASCII 也是有效的 Unicode。
-
请参阅 en.wikipedia.org/wiki/Bush_hid_the_facts 了解如何出错的有趣示例。
-
为什么调用者不告诉你它是什么类型的字符串?在创建字符串时,该信息肯定存在或存在。为什么不能重新设计函数,让调用者告诉你它是什么?
-
@Joey:我明白了。 Windows-1252 通常错误地被称为“ANSI”,尽管它从来都不是 ANSI 标准。它是 ISO 8859-1 的超集,也称为 Latin-1。