在c#中读取CSV文件的编码字符串问题
本文关键字:编码 编码字符 字符串 问题 文件 读取 CSV | 更新日期: 2023-09-27 18:15:40
我目前正在开发一个Windows Phone 8应用程序,在这个应用程序中,我必须从web服务下载一个CSV文件,并将数据转换为c#业务对象(这部分我没有使用库)。
使用RestSharp下载文件并将数据转换为c#业务对象不是问题。便携式,StreamReader
级和MemoryStream
级。我面对的问题是关于字符串字段的糟糕编码。
使用RestSharp库。可移植的,我检索csv文件内容作为字节数组,然后用以下代码将数据转换为字符串(其中response
是字节数组):
using (var streamReader = new StreamReader(new MemoryStream(response)))
{
while (streamReader.Peek() >= 0)
{
var csvLine = streamReader.ReadLine();
}
}
我的csvLine
变量包含J�rome
,而不是"j宇航"。我尝试了几种方法来获得Jérome
,但没有成功,如:
using (var streamReader = new StreamReader(new MemoryStream(response), true))
或
using (var streamReader = new StreamReader(new MemoryStream(response), Encoding.UTF8))
当我用简单的记事本软件如notepad++打开CSV文件时,只有当文件以ANSI编码时,我才能获得Jérome
。但是如果我在c#中尝试以下代码:
using (var streamReader = new StreamReader(new MemoryStream(response), Encoding.GetEncoding("ANSI")))
我有以下例外:
'ANSI'不是支持的编码名称。
有人能帮我正确解码我的CSV文件吗?
事先感谢您的帮助或建议!
您需要从中选择一个。
https://msdn.microsoft.com/en-us/library/windows/desktop/dd317756 (v = vs.85) . aspx
如果你不知道,你可以试着猜一下。根据这里的答案,猜测不是一个完美的解决方案。
你不能检测到代码页,你需要被告知它。您可以分析字节并猜测它,但这可能会给出一些奇怪的(有时是有趣的)结果。
从Lawtonfogle的链接我尝试使用
using (var streamReader = new StreamReader(new MemoryStream(response), Encoding.GetEncoding("Windows-1252")))
但是我有以下错误:
'Windows-1252'不是支持的编码名称。
在网上搜索为什么,我终于找到了下面的帖子,下面的答案适合我。
在我的例子中,这是有效的解决方案:
using (var streamReader = new StreamReader(new MemoryStream(response), Encoding.GetEncoding("ISO-8859-1")))
{
while (streamReader.Peek() >= 0)
{
var csvLine = streamReader.ReadLine();
}
}