我需要生成一个CSV文件。也许我“做错了”,因为我用自己的代码转储文件,而不是使用lib,但不管怎样。
看起来我把一切都搞对了。引号、逗号和所有东西似乎都被完美地转义了。这相当简单。问题是我使用unicode字符串进行测试,结果结果是?当我使用MS Excel用我的测试字符串保存一个文件,并点击另存为CSV时,打开文件时遇到了同样的问题(unicode字母变成了?)。不支持unicode吗?
我只是尝试像这样转储字符串,而不是将其输出到网页
var f = new System.IO.StreamWriter(filename, false, System.Text.Encoding.Unicode);现在我看到了unicode文本,但所有内容现在都在一列中。奇怪的是,在我选择的文本编辑器中,所有内容看起来都很正常,如果我复制/粘贴一些列,然后粘贴到另存为.csv中,我会看到这些列都很好。尽管它可能会去掉unicode。
我如何正确地保存它?
发布于 2010-09-16 23:44:59
System.Text.Encoding.Unicode使用UTF-16编码。尝试告诉您的文本编辑器使用UTF-16解码;我猜您用来显示输出文件的编辑器默认使用UTF-8或ASCII。如果是这样的话,另一种方法可能是使用System.Text.Encoding.UTF8对输出进行编码。
发布于 2010-09-17 00:03:59
您需要做两件事:将文本文件(或html页面)标记为包含Unicode字符( UTF-8或UTF-16),并确保您使用的是支持Unicode文本的文本编辑器。记事本是Windows上的好选择。
要将文本文件(如.csv)标记为包含Unicode文本,需要编写Byte Order Mark (BOM)作为文本文件中的第一个字符。对于UTF-16 little-endian (Intel),BOM将是字节0xFF、0xFE。Byte Order Mark告诉文档阅读器文档中的字符是按大端还是小端排序的。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表示UTF8编码的Unicode文本。
发布于 2010-09-16 23:50:00
也可能是Word使用的字体缺少您要显示的这些字符。如果我打开Word,按住ALT键并mash my numpad,它会将字体更改为数学字体,但仍会显示该字体中缺少的字符项。
https://stackoverflow.com/questions/3728282
复制相似问题