C#UTF8读/输出

use*_*753 6 c# utf-8 .net-3.5

我正在尝试做一些我认为应该相当简单的事情,但我已经花了太多时间在它上面并且我尝试了几种不同的方法,我研究但无济于事.

基本上,我有一个巨大的名字列表,其中包含来自UTF8字符集的"特殊"字符.

我的最终目标是读取每个名称,然后使用URL中的该名称作为GET变量发出HTTP请求.

我的第一个目标是从文件中读取一个名称,并将其标准化以确认我可以在创建字符串并发出所有HTTP请求之前正确读写UTF8.

test1.txt我制作的文件只包含以下内容:

OWNAGE

然后我用这个C#代码读入文件.我设置StreamReader编码和Console.OutputEncodingto UTF8.

static void Main(string[] args)
{
    Console.OutputEncoding = System.Text.Encoding.UTF8;

    using (StreamReader reader = new StreamReader("test1.txt",System.Text.Encoding.UTF8))
    {
        string line;

        while ((line = reader.ReadLine()) != null)
        {
            Console.WriteLine(line);
        }

    }

    Console.ReadLine();
}
Run Code Online (Sandbox Code Playgroud)

令我惊讶的是,我得到了这样的输出:

在此输入图像描述

预期输出与原始文件内容完全相同.

如果我甚至不能做一个简单的读/写UTF8字符串任务,我怎么能确定我要构建的用于发出HTTP请求的字符串是否正确?

Tim*_*mwi 6

你的程序没问题(假设输入文件实际上是UTF-8).如果您调试程序并使用Watch窗口查看字符串(line变量),您会发现它是正确的.就是你如何确定你将发送正确的HTTP请求(或者你对字符串做的任何其他事情).

您所看到的是Windows控制台中的错误.

幸运的是,它只影响光栅字体.如果您将控制台窗口更改为使用TrueType字体,例如Consolas或Lucida Console,则问题就会消失.

截图

您可以使用"默认值"菜单项为以后的所有窗口设置此项:

截图