在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文件吗?

事先感谢您的帮助或建议!

在c#中读取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();
  }
}