C#:具有unicode编码的日语字符

时间:2011-08-30 17:58:02

标签: c# encoding character-encoding

代码的意图是将unicode作为日文字符打印到文件

   String s = "\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\u3059\u308b\u30d5\u30a1\u30a4\u30eb\u304c\u6307\u5b9a\u3055\u308c\u3066\u3044\u307e\u305b\u3093";
   var Bytes = Encoding.Unicode.GetBytes(s);      
   string  key = Encoding.UTF8.GetString(Encoding.Convert(Encoding.Unicode, Encoding.UTF8, Bytes));

关键是我要打印到文件但值\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\u3059\u308b\u30d5\u30a1\u30a4\u30eb\u304c\u6307\u5b9a\u3055\u308c\u3066\u3044\u307e\u305b\u3093任何想法都错了?

2 个答案:

答案 0 :(得分:2)

错误的是字符串(key)没有用于存储它的字节的概念。在这种情况下,您的字符串是:

字符串

アップロードするファイルが指定されていません

这正是

"\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\u3059\u308b\u30d5\u30a1\u30a4\u30eb\u304c\u6307\u5b9a\u3055\u308c\u3066\u3044\u307e\u305b\u3093" 

装置。表达式'\u30a3'看起来像2个Unicode字节,但它实际上只是意味着字符 'ア'

如果保存为UTF-8文件,则写入的字节为:

UTF-8字节

File.WriteAllText("temp.txt", "アップロードするファイルが指定されていません", Encoding.UTF8);

内容将是(以字节为单位)

 E3 82 A2 E3 83 83 E3 83 97 E3 83 AD E3 83 BC E3 83 89 E3 81 99 E3 82 8B E3 83 
 95 E3 82 A1 E3 82 A4 E3 83 AB E3 81 8C E6 8C 87 E5 AE 9A E3 81 95 E3 82 8C E3 
 81 A6 E3 81 84 E3 81 BE E3 81 9B E3 82 93

UTF-16字节

File.WriteAllText("temp.txt", "アップロードするファイルが指定されていません", Encoding.Unicode);

内容将是(以字节为单位)

 A2 30 C3 30 D7 30 ED 30 FC 30 C9 30 59 30 8B 30 D5 30 A1 30 A4 30 EB 30 4C 30 
 07 63 9A 5B 55 30 8C 30 66 30 44 30 7E 30 5B 30 93 30

答案 1 :(得分:0)

One不会将Unicode“转换”为UTF-8: - /

除了作为整套规范的父级之外,

Unicode可以被认为是“简单地”定义代码点/字符和交互规则。 UTF-8 编码是将一系列Unicode代码点映射为八位字节序列(8位字节)的特定规则集。

LINQPad

中试试
String s = "\u30a2\u30c3\u30d7\u30ed";
s.Dump();     // original string
var bytes = Encoding.UTF8.GetBytes(s);      
bytes.Dump(); // see UTF-8 encoded byte sequence
string key = Encoding.UTF8.GetString(bytes);
key.Dump();   // contents restored

UTF-8 仅存在于bytes

快乐的编码。