将utf8文件读取到没有BOM的std :: string

时间:2015-09-15 20:09:01

标签: c++11 unicode utf-8

我正在尝试将一个utf8内容读取到char *,我的文件没有任何DOM,所以代码是直的,(文件是unicode punctuation

char* fileData = "\u2010\u2020";

我看不出单个unsigned char 0> 255可以包含值0的字符> 65535所以我必须遗漏一些东西。

...
std::ifstream fs8("../test_utf8.txt");
if (fs8.is_open()) 
{
  unsigned line_count = 1;
  std::string line;
  while ( getline(fs8, line)) 
  {
    std::cout << ++line_count << '\t' << line << L'\n';
  }
}
...

那么如何将utf8文件读入char *,(甚至是std :: string)

1 个答案:

答案 0 :(得分:0)

好吧,您正在正确地将文件读入std::string并且std::string支持UTF8,可能是您的控制台 *无法显示非ASCII字符。

基本上,当字符代码页大于CHAR_MAX/2时,您只需使用许多字符表示此字符。 如何以及多少个字符?这就是编码的全部意义。 例如,UTF32会将每个字符,ASCII和非ASCII显示为4个字符。因此&#34; 32&#34; (每个字节为8位,4 * 8 = 32)。

未提供有关您使用的操作系统的任何其他信息,我们无法就您的程序如何显示该文件的行提供建议。

*或更确切地说,标准输出可能会被实现为控制台文本。

相关问题