【发布时间】:2015-10-02 20:19:57
【问题描述】:
我目前正在开发一个 Windows Phone 8 应用程序,在该应用程序中我必须从 Web 服务下载 CSV 文件并将数据转换为 C# 业务对象(这部分我不使用库)。
使用 RestSharp.Portable、StreamReader 类和 MemoryStream 类下载文件并将数据转换为 C# 业务对象不是问题。
我面临的问题是关于字符串字段的错误编码。
使用库 RestSharp.Portable,我将 csv 文件内容检索为字节数组,然后使用以下代码将数据转换为字符串(其中 response 是字节数组):
using (var streamReader = new StreamReader(new MemoryStream(response)))
{
while (streamReader.Peek() >= 0)
{
var csvLine = streamReader.ReadLine();
}
}
但我的csvLine 变量包含J�rome,而不是“Jérome”。我尝试了几件事来获得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 文件吗?
提前感谢您的帮助或建议!
【问题讨论】:
-
首先将您的文件转换为 UTF-8,然后使用该编码
-
对于
GetEncoding(string),参数必须是所谓的 WebName,即 IANA 注册的编码名称,例如Windows-1252。 -
@AlexanderObersht @archon @Amit :感谢您的帮助。我终于找到了使用
using (var streamReader = new StreamReader(new MemoryStream(response), Encoding.GetEncoding("ISO-8859-1")))的可行解决方案。
标签: c# windows-phone-8 encoding character-encoding windows-phone