如何在没有UTF-8特定代码的情况下解析多语言文档

时间:2015-12-17 07:57:57

标签: c++ c parsing csv unicode

我正在编写一个小程序,该程序使用CSV电子表格中的字符编写许多不同的通用语言,并将它们注入特定于每种语言的较小文件中。

我知道8位字符串对于此来说太小了,并假设16位wchar_t数据类型就足够了。 (我对表情符号或死语言不感兴趣,只有日语,普通话,西班牙语和其他一些语言。)然而,研究该主题时,wchar_twstring似乎不够这个任务? " UTF-8"和#34;语言环境"经常出现,但是这些主题对于我想做的事情感觉太远,太复杂/一般......如果可以的话,我现在想要避开它们!

鉴于包含这些常用语言的CSV文档,在Windows上,是否可以将这些字符读入内存,解析它们,然后将它们写入新文件,仅使用标准CI / O /解析库和最少的知识的Unicode?例如,wstringfgetws()wcstok()wcsstr()都是我目前所熟悉的功能。 (有一天我会学习Unicode,当然,但这对我来说太重要了。)

我的数据解析方式只能查找引号,标点符号和一些英文单词等分隔符。我读取的文件要么是程序本身产生的,要么是从电子表格程序中导出的......我不知道如何用C库指定编码,这可能是自动的吗?电子表格程序允许我选择编码,虽然它没有提供UTF-16作为选项,这是不幸的,因为这似乎将最简单的映射到我wstring(16位)的实现。 / p>

1 个答案:

答案 0 :(得分:3)

在Windows wchar_t中是Unicode数据的UTF-16表示。这意味着如果您正在处理的数据包含死字符(超出基本平面),则编码将创建多个wchar_t值以表示一个Unicode代码点。

这项工作的重点是CSV文件是如何编码的。

  1. UTF-16 - 在这种情况下,使用wstringfgetws等来读取和写入从源到目的地的行
  2. UTF-8 - 使用fgets读取编码数据,然后使用MultibyteToWideString将UTF-8转换为wchar_t
  3. 特定于语言的代码页。在这种情况下,您需要再次使用fgets读取数据,但要明确标识文件编写的代码页,并转换为宽字符。