C# .NET控制台应用程序中的越南语字符(UTF-8)
我试图将一个UTF-8字符串(越南语)写入C#Console,但没有成功。我在Windows7上运行 我尝试使用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
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,但它似乎没有。