Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何在c++;_C++_String_Utf 8 - Fatal编程技术网

C++ 如何在c++;

C++ 如何在c++;,c++,string,utf-8,C++,String,Utf 8,我有一个字符串输出,它不一定是有效的utf8。我必须将其传递给只接受有效utf8字符串的方法。 因此,我需要将输出转换为最接近的有效utf8字符串,以删除无效字节或部分。如何在C++中实现这一点?我不想使用第三方库。您应该使用utf8(const StringPiece&utf8)或toUTF8String(StringClass&result)中的icu::UnicodeString方法。如果您确定您的字符串是有效的UTF-8,并且只有几个损坏的字节,可以修复该问题。从页面: #包括“utf8

我有一个字符串输出,它不一定是有效的utf8。我必须将其传递给只接受有效utf8字符串的方法。

因此,我需要将输出转换为最接近的有效utf8字符串,以删除无效字节或部分。如何在C++中实现这一点?我不想使用第三方库。

您应该使用utf8(const StringPiece&utf8)或
toUTF8String(StringClass&result)中的
icu::UnicodeString
方法。
如果您确定您的字符串是有效的UTF-8,并且只有几个损坏的字节,可以修复该问题。从页面:
#包括“utf8.h”
无效修复\u utf8\u字符串(std::string和str){
std::字符串温度;
utf8::replace_无效(str.begin()、str.end()、back_插入器(temp));
str=温度;
}


在处理Unicode数据时,不使用第三方库的要求几乎是不可能的,但UTF8-CPP库只是标题,它尽可能轻。

我认为这是不安全的。如果字符串不是UTF-8,唯一安全的方法是完全中止。否则,您将面临攻击。无效字节对您意味着什么?您想要一个有效的utf-8流(可能包含无效的代码点或非敏感组合)还是一个有效的unicode utf-8编码流?我需要一个有效的unicode utf-8编码流。。。删除所有无效的内容。UTF-8()的Wikipedia页面包含许多信息,这些信息可以帮助您轻松完成此任务。@SteveJessop:不,攻击不在有效字符串中,而是以您尝试从无效数据恢复的方式进行的。这种情况以前发生过,因此,Unicode标准现在规定应用程序在遇到无效字节时应立即放弃。 #include "utf8.h" void fix_utf8_string(std::string& str) { std::string temp; utf8::replace_invalid(str.begin(), str.end(), back_inserter(temp)); str = temp; }