【问题标题】:C# StreamReader Encoding.UTF8 not workingC# StreamReader Encoding.UTF8 不工作
【发布时间】:2015-02-20 07:54:54
【问题描述】:

我在 Visual Studio 中有一个 C# 项目,它下载并解析包含韩文、中文和其他 unicode 字符的 XML 文件。例如,对于名为 Taeyang 的韩国艺术家,它会生成这样的 XML:

<name>태양</name>

但它会返回

<name>??</name>

我试过StreamReader Encoding.Default,但结果是

<name>태양</name>

代码:

string address = String.Format("http://musicbrainz.org/ws/2/artist/{0}?inc=url-rels", mbids[ord]);
HttpWebRequest newRequest = WebRequest.Create(address) as HttpWebRequest;
               newRequest.Headers["If-None-Match"] = etagProf;
               newRequest.Headers[HttpRequestHeader.AcceptEncoding] = "gzip";
var response = newRequest.GetResponse();
// Reader
Stream stream = response.GetResponseStream();
StreamReader reader = new StreamReader(stream, Encoding.UTF-8);
string data = reader.ReadToEnd();

和xml来源:

<?xml version="1.0" encoding="UTF-8"?>
<metadata xmlns="http://musicbrainz.org/ns/mmd-2.0#">
    <artist type="Person" id="d84e5667-3cbe-4556-b551-9d7e4be95d71">   
        <name>태양</name>
        <sort-name>Taeyang</sort-name><gender>Male</gender>
        <country>KR</country>
        ...........
    </artist>
</metadata>

我很困惑,为什么会这样?有什么想法吗?

【问题讨论】:

  • 您确定源文件实际上是 UTF8 格式吗?
  • 当然,我从响应头检查了它的字符集
  • 你能分享一个你的原始输入 xml 文件吗?
  • @netblognet : 刚刚更新了我的问题,请检查一下 :)

标签: c# unicode streamreader


【解决方案1】:

使用下面的代码(注意我注释掉你的 2 行)

//newRequest.Headers["If-None-Match"] = "d84e5667-3cbe-4556-b551-9d7e4be95d71";
//newRequest.Headers[HttpRequestHeader.AcceptEncoding] = "gzip";

并更改了您的线路:StreamReader(stream, Encoding.UTF-8);

收件人:StreamReader(stream, Encoding.UTF8);

我得到了一个很好的结果字符明智:

string address = String.Format("http://musicbrainz.org/ws/2/artist/{0}?inc=url-rels","d84e5667-3cbe-4556-b551-9d7e4be95d71");
HttpWebRequest newRequest = WebRequest.Create(address) as HttpWebRequest;
//newRequest.Headers["If-None-Match"] = "d84e5667-3cbe-4556-b551-9d7e4be95d71";
//newRequest.Headers[HttpRequestHeader.AcceptEncoding] = "gzip";
var response = newRequest.GetResponse();
// Reader
Stream stream = response.GetResponseStream();
StreamReader reader = new StreamReader(stream, Encoding.UTF8);
string data = reader.ReadToEnd();
MessageBox.Show(data);

【讨论】:

  • 我刚刚做了,又输出了태ì–'
  • @Sag1v: GetEncoding 不依赖于确定真实文本编码
  • @Sag1v - 得出了相同的结果。代码在我的机器上也运行良好。因此,如果这不能解决 Michael Antonio 的问题,可能他的操作系统在处理 UTF-8 代码时存在一些问题。
  • @netblognet 可能是,但我认为问题存在于我注释掉 newRequest.Headers["If-None-Match"] = "d84e5667-3cbe-4556-b551-9d7e4be95d71" 的两行中; newRequest.Headers[HttpRequestHeader.AcceptEncoding] = "gzip";
  • 大家好,我解决了这个问题。请看我的回答。谢谢你的时间......很高兴分享:)
【解决方案2】:

尝试 UTF8 编码

StreamReader sr= new StreamReader(file_name, System.Text.Encoding.UTF8);

【讨论】:

  • @MichaelAntonio 是 Encoding.UTF-8 错字吗?
  • 您正在使用的计算机系统语言和操作系统是什么?
【解决方案3】:

我发现Console.WriteLine() 无法清晰的输出unicode。所有 unicode(例如韩语、中文)和除 a-z 和 0-9 之外的所有字符都无法按预期输出,因为 Console.WriteLine() 使用单一字体 Raster Font

但主要问题是关于我的数据库连接,我忘记在我的连接字符串中添加charset=utf-8

【讨论】:

    猜你喜欢
    • 2012-04-02
    • 2014-03-03
    • 1970-01-01
    • 2017-03-23
    • 1970-01-01
    • 2018-01-06
    • 1970-01-01
    • 1970-01-01
    • 2016-09-13
    相关资源
    最近更新 更多