我正在尝试编写代码来比较两个字符串。 在Windows中我可以使用strcmp但我想写多字节字符串,以便它与所有其他平台兼容 我可以使用memcmp吗? 如果没有,那么我可以使用任何其他API,或者我需要编写自己的API。
答案 0 :(得分:5)
你必须小心。我不是Unicode /多字节编码方面的专家,但我知道,对于变音符号,当字节不完全相同时,有时两个字符串可以被认为是相同的。建议使用预先测试的API,因为字符串编码会变得非常混乱。
见the old new thing on case mapping。我想不出变音符号的参考,但如果我这样做,我会发布它。
答案 1 :(得分:2)
如果两个字符串使用相同的编码,则可以使用memcmp
。如果他们使用UTF-8并且你的字符串不包含NULL字符(U + 0000),你甚至可以使用strcmp
,因为在没有NULL的情况下,0不会出现在UTF-8中编码字符串。另一种选择是使用mbstowcs
将字符串转换为宽字符。
答案 2 :(得分:1)
如果字符串都使用相同的编码,memcmp
将正常工作。但请记住,宽字符在不同平台上的大小不同。
如果字符串使用不同的编码,则需要ICU等库来处理它。