c# - .NET 控制台应用程序 (UTF-8) 中的越南字符

标签 c# .net utf-8 console-application

我正在尝试将 UTF-8 字符串(越南语)写入 C# 控制台,但没有成功。我在 Windows 7 上运行。

我尝试使用 Encoding 类将 string 转换为 char[]byte[] 并且然后是String,也没用,字符串是直接从数据库输入的。

举个例子

Tôi tên là Đức, cuộc sống thật vui vẻ tuyệt vời

它不显示像 Đ 这样的特殊字符...而是显示 ?,比 Encoding 差很多类。

有没有人可以尝试这个或知道这个问题?


我的代码

static void Main(string[] args)
{
    XDataContext _new = new XDataContext();
    Console.OutputEncoding = Encoding.GetEncoding("UTF-8");
    string srcString = _new.Posts.First().TITLE;

    Console.WriteLine(srcString);
    // Convert the UTF-16 encoded source string to UTF-8 and ASCII.
    byte[] utf8String = Encoding.UTF8.GetBytes(srcString);
    byte[] asciiString = Encoding.ASCII.GetBytes(srcString);

    // Write the UTF-8 and ASCII encoded byte arrays. 
    Console.WriteLine("UTF-8  Bytes: {0}", BitConverter.ToString(utf8String));
    Console.WriteLine("ASCII  Bytes: {0}", BitConverter.ToString(asciiString));


    // Convert UTF-8 and ASCII encoded bytes back to UTF-16 encoded  
    // string and write.
    Console.WriteLine("UTF-8  Text : {0}", Encoding.UTF8.GetString(utf8String));
    Console.WriteLine("ASCII  Text : {0}", Encoding.ASCII.GetString(asciiString));

    Console.WriteLine(Encoding.UTF8.GetString(utf8String));
    Console.WriteLine(Encoding.ASCII.GetString(asciiString));
}

这是优秀的输出

Nhà báo đi hội báo Xuân
UTF-8  Bytes: 4E-68-C3-A0-20-62-C3-A1-6F-20-C4-91-69-20-68-E1-BB-99-69-20-62-C3-
A1-6F-20-58-75-C3-A2-6E
ASCII  Bytes: 4E-68-3F-20-62-3F-6F-20-3F-69-20-68-3F-69-20-62-3F-6F-20-58-75-3F-
6E
UTF-8  Text : Nhà báo đi hội báo Xuân
ASCII  Text : Nh? b?o ?i h?i b?o Xu?n
Nhà báo đi hội báo Xuân
Nh? b?o ?i h?i b?o Xu?n


Press any key to continue . . .

最佳答案

class Program
{
    [DllImport("kernel32.dll")]
    static extern bool SetConsoleOutputCP(uint wCodePageID);

    static void Main(string[] args)
    {
        SetConsoleOutputCP(65001);
        Console.OutputEncoding = Encoding.UTF8;
        Console.WriteLine("tést, тест, τεστ, ←↑→↓∏∑√∞①②③④, Bài viết chọn lọc");
        Console.ReadLine();
    }
}

输出的屏幕截图(使用 Consolas 或具有上述所有字符的其他字体):

proof

关于c# - .NET 控制台应用程序 (UTF-8) 中的越南字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2213541/

相关文章:

C# 和 utf8_decode

带有 POST 编码问题的 C# Web 请求

python - pyodbc 无法正确处理 unicode 数据

c# - 使用 Entity Framework 是否有更简洁或优雅的方法将多个参数传递给 SQL 存储过程?

c# - 字符串和 Enumerable.Count

c# - 关闭表单时仍在运行的后台工作程序会发生什么情况?

.net - 从 .NET 中的构造函数中抛出异常

.net - 使用WPF的ShowDialog打开表单时发生异常

c# - .NET Core 控制台应用程序中解决 FileIO does not exist in nameespace Microsoft.VisualBasic

c# - 无法序列化 DataTable。未设置数据表名称