我正在编写一个小程序,该程序使用CSV电子表格中的字符编写许多不同的通用语言,并将它们注入特定于每种语言的较小文件中。
我知道8位字符串对于此来说太小了,并假设16位wchar_t
数据类型就足够了。 (我对表情符号或死语言不感兴趣,只有日语,普通话,西班牙语和其他一些语言。)然而,研究该主题时,wchar_t
或wstring
似乎不够这个任务? " UTF-8"和#34;语言环境"经常出现,但是这些主题对于我想做的事情感觉太远,太复杂/一般......如果可以的话,我现在想要避开它们!
鉴于包含这些常用语言的CSV文档,在Windows上,是否可以将这些字符读入内存,解析它们,然后将它们写入新文件,仅使用标准CI / O /解析库和最少的知识的Unicode?例如,wstring
,fgetws()
,wcstok()
和wcsstr()
都是我目前所熟悉的功能。 (有一天我会学习Unicode,当然,但这对我来说太重要了。)
我的数据解析方式只能查找引号,标点符号和一些英文单词等分隔符。我读取的文件要么是程序本身产生的,要么是从电子表格程序中导出的......我不知道如何用C库指定编码,这可能是自动的吗?电子表格程序允许我选择编码,虽然它没有提供UTF-16作为选项,这是不幸的,因为这似乎将最简单的映射到我wstring
(16位)的实现。 / p>
答案 0 :(得分:3)
在Windows wchar_t
中是Unicode数据的UTF-16表示。这意味着如果您正在处理的数据包含死字符(超出基本平面),则编码将创建多个wchar_t
值以表示一个Unicode代码点。
这项工作的重点是CSV文件是如何编码的。
wstring
和fgetws
等来读取和写入从源到目的地的行fgets
读取编码数据,然后使用MultibyteToWideString
将UTF-8转换为wchar_t
。fgets
读取数据,但要明确标识文件编写的代码页,并转换为宽字符。