【发布时间】:2012-10-13 09:38:10
【问题描述】:
我有一个字符串输出,它不一定是有效的 utf8。我必须将它传递给只接受有效 utf8 字符串的方法。
因此,我需要将输出转换为最接近的有效 utf8 字符串,删除无效字节或部分。我怎么能在 C++ 中做到这一点?我不想使用 3rd 方库。
【问题讨论】:
-
我认为这不安全。如果您的字符串不是 UTF-8,唯一安全的做法是完全中止。否则,您将面临攻击。
-
invalid bytes 对您意味着什么?你想要一个有效的 utf-8 流(可能包含无效的代码点或无意义的组合)还是一个有效的 unicode utf-8 编码流?
-
我需要一个有效的 unicode utf-8 编码流...删除所有无效的内容。
-
UTF-8 的 Wikipedia 页面 (en.wikipedia.org/wiki/Utf-8) 包含大量信息,可以轻松帮助您完成此任务。
-
@SteveJessop:不不,攻击不在 valid 字符串中,而是在您尝试从 invalid 数据中恢复的方式中。这种情况以前发生过,因此,Unicode 标准现在规定应用程序应在遇到无效字节时立即放弃。