【发布时间】:2012-08-20 23:27:49
【问题描述】:
目前我正在尝试逐字符读取 UTF-16 编码的 CSV 文件,并将每个字符转换为 ascii,以便我可以处理它。我稍后计划将处理后的数据改回 UTF-16,但这不是重点。
我马上就知道我这样做是完全错误的,因为我以前从未尝试过这样的事情:
int main(void)
{
FILE *fp;
int ch;
if(!(fp = fopen("x.csv", "r"))) return 1;
while(ch != EOF)
{
ch = fgetc(fp);
ch = (wchar_t) ch;
ch = (char) ch;
printf("%c", ch);
}
fclose(fp);
return 0;
}
出于某种原因,我一厢情愿地希望那是魔法,但事实并非如此。如何读取 UTF-16 CSV 文件并将其转换为 ascii?我的猜测是因为每个 utf-16 字符是两个字节(我认为?)我将不得不一次从文件中读取两个字节到一个我不确定的数据类型的变量中。然后我想我将不得不检查这个变量的位以确保它是有效的 ascii 并从那里转换它?我不知道我会怎么做,任何帮助都会很棒。
【问题讨论】:
-
CSV 文件是否只包含 ASCII 中存在的字符?
-
是的,这是很好的部分,它只是 UTF-16 编码,因为生成它的软件 (WonderWare)
-
您应该只能读取每个第二个字节以获得所需的结果。另一个字节应始终为零。
-
每第二个字节 hm?那么将它写回utf-16(假设所使用的字符仍然都是ASCII字符)我会让每个第一个字节为空?
-
好吧,老实说,除非他真的知道自己在做什么,否则不应该拥有 UTF-16 CSV 文件。