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

C# .NET控制台应用程序中的越南语字符(UTF-8),c#,.net,utf-8,console-application,C#,.net,Utf 8,Console Application,我试图将一个UTF-8字符串(越南语)写入C#Console,但没有成功。我在Windows7上运行 我尝试使用Encoding类将string转换为char[]再转换为byte[]再转换为string,但没有帮助,字符串是直接从数据库输入的 这里有一些例子 托伊·托恩·拉什ức、 特写ộCSống thật vui vẻ 星期二ệ电视ờ我 它不显示特殊字符,如Đ或ứ。。。相反,它显示为?,比编码类更糟糕 有没有人可以试试这个或者知道这个问题 我的代码 static void Main(str

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

我尝试使用
Encoding
类将
string
转换为
char[]
再转换为
byte[]
再转换为string,但没有帮助,字符串是直接从数据库输入的

这里有一些例子

托伊·托恩·拉什ức、 特写ộCSống thật vui vẻ 星期二ệ电视ờ我

它不显示特殊字符,如
Đ
。。。相反,它显示为
,比编码类更糟糕

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


我的代码

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 . . .

您需要设置
控制台.outputeneCoding
以匹配
UTF-8

可能是这样的:

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

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

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

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

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();
    }
}
输出的屏幕截图(使用Console或具有上述所有字符的其他字体):


我已经添加了这个示例。它根本不起作用,我的控制台。OutputEncoding与你的有点不同,但它的工作方式相同。我也试过你的,但仍然是同样的问题:如何在httpclient中使用它,我面临的问题是:(我试过这样做,但不适用于我的request.Content.Headers.ContentType.Parameters.Add(new-NameValueHeaderValue(“charset”,“utf-16”));将输出编码设置为UTF8应该可以工作:
Console.outputeneconding=encoding.UTF8
。您确定问题不是由于从数据库读取文本的方式造成的吗?如果您在代码中放置断点,则
srcString
编码是否正确?是的,断点输出100%正常。我正在考虑移动以获得胜利dows的形式,但在这种情况下,我不需要那么多花哨的功能:(对winconsoleI来说太糟糕了,我没有设置字体,但它seam luicida不能显示UTF8?我是否可以用C#动态更改它?字体很重要。我尝试了代码,一开始我得到了垃圾编码,所以我不希望字体切换会产生影响,但确实如此。似乎
SetConsoleOutputCP
不再需要更改让它工作起来-也许框架中已经修复了一些东西。但是它只支持有限的字体。例如,我不能用泰米尔语输出,尽管我在操作系统中有该语言的unicode字体。这就是我的意思,我不支持unicode。我想它只支持单间距字体,而且可能(不确定!)不能正确地从右向左,但是如果你找到一种带有泰米尔语字符的单间距字体,它应该可以使用泰米尔语。我试过DejaVu,但它似乎没有。