【发布时间】:2011-05-02 09:23:41
【问题描述】:
如果我用 C++ 向文件写入包含一些 unicode 字符的随机字符串,我的文本编辑器会告诉我我没有创建有效的 UTF-8 文件。
// Code example
const std::string charset = "abcdefgàèíüŷÀ";
file << random_string(charset); // using std::fstream
我能做些什么来解决这个问题?我需要做很多额外的手动编码吗?我理解它的方式,std::string 不关心编码,只关心字节,所以当我传递一个 unicode 字符串并将其写入文件时,该文件肯定应该包含相同的字节并被识别为 UTF- 8个编码文件?
【问题讨论】:
-
你在看std::wstring吗?
-
只是一个疯狂的猜测:可能是您的
random_string函数由于 charset 字符串的一对一错误而意外插入了空值? -
@Charles: 这就像我 :) 但我对此表示怀疑,因为 std::string 构造函数会丢弃字符串文字中的空值,而 random_string 函数只是从字符集字符串。
-
std::string不一定会丢弃字符串文字中的空值。通常,它在内部将字符串表示为以 null 结尾的 C 字符串,以便轻松实现std::string::c_str()函数。 -
字符:'àèíüŷÀ' 不是 UTF-8。注意 UTF-8 是一个多字节字符集。这意味着 charset[x] 不能保证得到一个完整的字符,因为它可能会被拆分为多个字符。