用C / C ++中的.csv文件读汉字

时间:2012-03-28 03:04:58

标签: c++ cjk

我有一个带有中文字符的.csv文件。我需要阅读这些中文字符并存储它们以便在程序中进一步使用。我知道中文字符必须以utf格式处理,使用wchar_t等,但我无法确切知道如何完成。有人可以帮帮我吗?

1 个答案:

答案 0 :(得分:4)

首先,没有独特的方法来编码中文字符。为了能够解码文件,首先必须知道使用了哪种编码。

最常见的是utf-8,utf-16,big5和gb2312。 gb2312用于简化字符,主要用于中国大陆。 big5适用于传统角色,主要用于台湾和香港。大多数国际公司都会使用utf-8或utf-16。在Utf-8中,编码具有可变长度(单位长度为1个字节),并且通常更有效地存储在包含ASCII中许多字符的文本中(因为这些字符仅占用UTF-8中的字节),而在UTF-16中,字符的单位长度为2个字节(字符也有可变长度)。

阅读Joel Spolky关于unicode的文章也是值得的:http://www.joelonsoftware.com/articles/Unicode.html

假设cvs文件是以UTF-8编码的。 所以你必须指定编码。 使用以下命令,该文件被解释为UTF-8并转换为具有修复大小的wchar_t(Windows中为2个字节,Linux中为4个字节):

const std::locale utf8_locale
            = std::locale(std::locale(), new std::codecvt_utf8<wchar_t>());
std::wifstream file("filename");
file.imbue(utf8_locale);

然后,您可以阅读和处理文件,例如此

  std::wstring s;
  while (std::getline(dict, s))
  {
        // Do something with the string
        auto end1 = s.find_first_of(L';');
        ...
  }

为此你需要这些头文件

#include <iostream>
#include <fstream>
#include <string>
#include <locale>
#include <codecvt>