Rac*_*oon 5 c# encoding hex utf-8 character-encoding
有一个中文字符,以UTF-8表示为F0 A4 AD A2.此处描述了这个角色:http://en.wikipedia.org/wiki/UTF-8
U + 24B62 F0 A4 AD A2
当我在C#中运行此代码时...
byte[] data = { 0xF0, 0xA4, 0xAD, 0xA2 };
string abc = Encoding.UTF8.GetString(data);
Console.WriteLine("Test: description = {0}", abc);
Run Code Online (Sandbox Code Playgroud)
...我将输出重定向到文本文件,然后使用notepad.exe选择UTF-8编码打开它.我希望得到输出,但确实得到两个问号(??).
字节序列是正确的.它适用于Perl:
print "\xF0\xA4\xAD\xA2";
Run Code Online (Sandbox Code Playgroud)
在输出中,我得到了
所以我的问题是:为什么我得到"??" 而不是C#中的"" ?
PS这个角色没什么特别的:我对任何角色(2,3或4个字节长)都有相同的东西.
Sas*_*sha 12
默认情况下,控制台无法显示Unicode字符.它仅显示ASCII.要启用它显示Unicode,请使用:
Console.OutputEncoding = System.Text.Encoding.Unicode
Run Code Online (Sandbox Code Playgroud)
在写信之前.
但无论如何它在大多数操作系统上都会失败,因为Windows命令行本身不支持Unicode.
因此,出于测试目的,将输出写入文件会更好
您需要使用 UTF8 写入文件。下面的代码显示了您可以如何做到这一点。在记事本中打开生成的文件时,字符显示正确:
string c = "";
var bytes = Encoding.UTF8.GetBytes(c);
var cBack = Encoding.UTF8.GetString(bytes);
using (var writer = new StreamWriter(@"c:\temp\char.txt", false, Encoding.UTF8))
{
writer.WriteLine(cBack);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
13979 次 |
| 最近记录: |