我有一个字符串,我使用boost的regex_search()从html页面重新获得。不幸的是,页面中的日文字符被写为\ u代码,regex_search将这些字符解释为字符串中的普通字符。
所以,我的问题是,如何将这些代码转换为普通的Unicode文本? (显然是UTF-8)
这是一个基本问题,fstream完全不考虑UTF-8。看起来boost有自己的fstream实现,但改为它对我的程序没有任何影响,我找不到任何额外的设置来配置boost的fstream来使用UTF-8(虽然今天是我工作的第一天有了提升,我本可以错过它。)
作为最后一点:我在linux上运行它,但我当然很欣赏一种基于系统的便携式解决方案。
谢谢大家,我非常感谢帮助:D
答案 0 :(得分:0)
fstream
是一个仅限字符的窄流(它是basic_fstream<char>
的typedef)。 std::wfstream
将是您正在寻找的类型,虽然要完全可移植到Windows,但您可能必须引入C ++ 11依赖项(Windows没有Unicode语言环境,但支持与语言环境无关的Unicode C ++ 11引入的转换.Linux上的GCC不支持新的Unicode转换,但有大量的Unicode语言环境可供选择)或依赖于boost.locale。
您的步骤将是:
std::wofstream
(或首先转换为UTF-8,然后写入std::ofstream
)说明最后一步:
#include <fstream>
#include <locale>
int main()
{
std::locale::global(std::locale("en_US.utf8")); // any utf8 works
std::wofstream f("test.txt");
f.imbue(std::locale());
f << wchar_t(0x65e5) << wchar_t(0x672c) << wchar_t(0x8a9e) << '\n';
}
生成一个包含e6 97 a5 e6 9c ac e8 aa 9e 0a