c#:使用unicode编码的日语字符
本文关键字:日语 字符 编码 unicode 使用 | 更新日期: 2023-09-27 18:07:16
代码的目的是将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
任何想法是错的?
问题是字符串(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文件,则写入的字节数为:
<<p> utf - 8字节/strong>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
<<p> utf - 16字节/strong> 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
不能将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
中存在。
快乐编码。