C#:采用unicode编码的日语字符

C#:采用unicode编码的日语字符,c#,encoding,character-encoding,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 = Enco

该代码的目的是将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
有什么想法吗?

一个人不“转换”Unicode到UTF-8:-/

,除了作为整个规范集的父规范外,还可以被认为是“简单”定义代码点/字符和交互规则。UTF-8编码是将Unicode代码点序列映射为八位字节(8位字节)序列的一组特定规则

请尝试以下方法:

UTF-8仅存在于
字节中


快乐编码。

错的是字符串(
)没有用于存储它的字节的概念。在本例中,您的字符串是:

字符串:

这正是我想要的

"\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);
File.WriteAllText("temp.txt", "アップロードするファイルが指定されていません", Encoding.Unicode);
内容将是(以字节为单位)

UTF-16字节

File.WriteAllText("temp.txt", "アップロードするファイルが指定されていません", Encoding.UTF8);
File.WriteAllText("temp.txt", "アップロードするファイルが指定されていません", Encoding.Unicode);
内容将是(以字节为单位)


您的问题和示例代码完全无法解释。原始字符串是一个C#字符串(内部存储为UTF-16),然后将其更改为表示UTF-16字符串的字节序列。然后将其转换为表示UTF-8字符串的字节序列。然后将这些字节读回一个C#字符串,该字符串与最初的字符串相同。你到底想在这里实现什么?在.NET中,字符串总是UTF-16。所以UTF-8字符串的概念没有任何意义。您可以将字符串转换为UTF-8编码的字节序列:
var bytes=Encoding.UTF8.GetBytes(s)。这就是你需要的吗?UTF-8是一种Unicode字符编码。也许他正试图从中提取实际字符?你可能会发现这篇老文章很有帮助。在C#中,
Encoding.Unicode
表示UTF-16,所以当OP说“Unicode”时,他可能特别指UTF-16。@mquander非常正确。我同意你的评论;-)这就是我一直在寻找的,我想知道你如何在这里解码这些日文字符。非常感谢,我如何打开一个UTF_8 txt文件,正如你在
中所显示的那样,内容将是(以字节为单位)
part?@Luke:System.IO.StreamReader的构造函数接受一个编码参数,它默认为UTF-8,因此,如果您使用StreamReader读取UTF-8文件,它应该可以正常工作。否则,
File.ReadAllText
也可以采用编码参数,因此
File.ReadAllText(“my\u utf8\u File.txt”,encoding.utf8)
File.ReadAllText(“my\u utf16\u File.txt”,encoding.Unicode)
应该可以工作
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