我正在尝试做一些我认为应该相当简单的事情,但我已经花了太多时间在这上面,并且我尝试了几种我研究过的不同方法,但都无济于事。
基本上,我有一个巨大的名称列表,其中包含来自 UTF8 字符集的“特殊”字符。
我的最终目标是读取每个名称,然后使用 URL 中的该名称作为 GET 变量发出 HTTP 请求。
我的第一个目标是从文件中读入一个名称,并将其放入标准输出以确认我可以正确读写 UTF8,然后再创建字符串并发出所有 HTTP 请求。
我制作的test1.txt
文件只包含以下内容:
Öwnägé
然后我使用此 C# 代码读入文件。我将 StreamReader
编码和 Console.OutputEncoding
设置为 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();
}
令我惊讶的是,我得到了这样的输出:
预期输出与原始文件内容完全相同。
如果我什至不能执行读/写 UTF8 字符串这样的简单任务,我如何确定我将要构建的用于发出 HTTP 请求的字符串是正确的?
最佳答案
您的程序没问题(假设输入文件实际上是 UTF-8)。如果调试程序并使用 Watch 窗口查看字符串(line
变量),您会发现它是正确的。 那就是您如何确定您将发送正确的 HTTP 请求(或您对字符串执行的任何其他操作)的方法。
您看到的是 Windows 控制台中的错误。
幸运的是,它只影响光栅字体。如果您将控制台窗口更改为使用 TrueType 字体,例如Consolas 或 Lucida Console,问题就解决了。
您可以使用“默认”菜单项为所有 future 的窗口设置此项:
关于C# UTF8 读取/输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9586386/