繁体   English   中英

验证Windows C ++应用程序中的输入UTF-8序列

[英]Validating an input UTF-8 sequence in a Windows C++ application

我想验证用C ++编写的Windows应用程序中的输入UTF-8序列。

我的想法是简单地调用MultiByteToWideChar() ,只是请求目标字符串长度(而不是将整个字符串转换为UTF-16),并使用MB_ERR_INVALID_CHARS标志。
然后,如果函数返回0(表示失败)并且GetLastError()返回ERROR_NO_UNICODE_TRANSLATION ,则表示输入的UTF-8序列包含一些无效数据。

有更好的方法吗?

如果不了解MBTWC的内部结构,就很难指定更好的方法。 它至少需要对MBTWC和任何替代方法的使用进行定时测量(如果认为更快更好)。 实现您自己的UTF-8验证器将是一个允许进行比较的开始。 你可以在这里找到一个很好的参考实现,看看接受的答案。 Java代码很容易转换为C ++,并为您提供了充分的机会来确定它是否更好(针对您的情况)并在需要时允许进一步改进。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM