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任何想法是错的?

c#:使用unicode编码的日语字符

问题是字符串(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 中存在。

快乐编码。