C# UTF8 读取/输出

标签 c# .net-3.5 utf-8

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

基本上,我有一个巨大的名称列表,其中包含来自 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();
}

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

enter image description here

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

如果我什至不能执行读/写 UTF8 字符串这样的简单任务,我如何确定我将要构建的用于发出 HTTP 请求的字符串是正确的?

最佳答案

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

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

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

screenshot

您可以使用“默认”菜单项为所有 future 的窗口设置此项:

screenshot

关于C# UTF8 读取/输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9586386/

相关文章:

c# - Tesseract OCR 配置和图像处理

c# - 如何解决 "base64 invalid characters"错误?

.net-3.5 - 不从 .Net 2.0 迁移到 .Net 3.5 有多晚?

javascript - 诸如socket通信之类的东西需要utf-8编码吗?

c# - 如果在连接字符串时出错,则表示简写

c# - Windows Phone 上的状态大小

wpf - 开发WPF或Silverlight应用程序的工具

c# - WCF 服务能否同时支持缓冲和流式传输模式?

Java、UTF-8 和 Windows 控制台

sql-server - 使用 SQL Server Management Studio 2005 导出时使用 UTF-8 编码保存 CSV