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

时间:2010-02-06 15:11:47

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

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

我尝试使用将Encoding转换为stringchar[]的{​​{1}}类,然后转换为String,但没有帮助,字符串直接从数据库输入

以下是一些示例

  

TôitênlàĐức,cuộscốngthậtvuivẻ   tuyệtvời

它不显示byte[]Đ等特殊字符,而是显示,比编码类更糟糕。

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


我的代码

?

这里是出色的输出

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));
}

4 个答案:

答案 0 :(得分:7)

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

答案 1 :(得分:0)

您需要将Console.OutputEncoding设置为与UTF-8匹配。

可能类似于:

Console.OutputEncoding = System.Text.Encoding.UTF8;

答案 2 :(得分:0)

您在控制台窗口中使用的字体是否支持您尝试显示的字符?

答案 3 :(得分:-2)

这是cmd.exe控制台的问题。它不支持unicode。 [与C#/ .NET没什么关系]

如果可以或写入文件,请尝试将其更改为GUI应用程序。