CSV文件中的Unicode?

时间:2010-09-16 15:39:11

标签: .net unicode csv

我需要生成一个CSV文件。也许我'做错了'因为我用我自己的代码转储文件而不是使用lib但是反正。

看起来我的一切都是正确的。行情,逗号和一切似乎都完美地逃脱了。这很容易。问题是我使用unicode字符串进行测试,它们出现了????。当我使用MS Excel用我的测试字符串保存文件时,我点击保存为CSV打开文件让我遇到同样的问题(unicode字母变成?????)。 unicode不受支持吗?

我只是尝试像这样转储字符串,而不是将其输出到网页

var f = new System.IO.StreamWriter(filename, false, System.Text.Encoding.Unicode);

现在我看到了unicode文本,但现在一切都在一列中。奇怪的是,在我选择的文本编辑器中,一切看起来都很正常,如果我复制/粘贴几列并将其粘贴到保存为.csv,我看到列很好。虽然它可能会剥离unicode。

如何正确保存?

3 个答案:

答案 0 :(得分:3)

System.Text.Encoding.Unicode使用UTF-16编码。尝试告诉文本编辑用UTF-16解码;我猜你用来显示输出文件的编辑器默认为UTF-8或ASCII。如果是这样,则替代方案可能是使用System.Text.Encoding.UTF8对输出进行编码。

答案 1 :(得分:1)

您需要做两件事:将文本文件(或html页面)标记为包含Unicode字符(UTF-8或UTF-16),并确保使用支持Unicode文本的文本编辑器。记事本是Windows上不错的选择。

要将文本文件(例如.csv)标记为包含Unicode文本,您需要将Byte Order Mark (BOM)写为文本文件中的第一个字符。对于UTF-16 little-endian(Intel),BOM将为字节0xFF,0xFE。字节顺序标记告诉文档读取器文档中的字符是以big-endian还是little-endian排序。 BOM字符是Unicode字符表中保留的非打印字符。此BOM还可用于区分ASCII文本与UTF-8和其他Unicode编码(因为UTF-8 BOM字节序列与UTF-16等不同)。

某些文档编写者会为您编写BOM,或者可以选择包含或排除BOM。使用二进制十六进制转储查看文本文件字节以确定是否有BOM。不要使用文本编辑器 - BOM是非显示字符。

要指示您生成的HTML页面包含Unicode字符,您需要设置Content-Type标头以指示Unicode字符集:Content-Type: text/html; charset=utf-8表示UTF-8编码的Unicode文本,例如。

答案 2 :(得分:0)

它也可能只是Word正在使用的字体缺少您尝试显示的这些字符。如果我打开Word,按住ALT并混合我的小键盘,它会将字体更改为数学字体,但仍会显示相关字体中缺少的字符项。