C#与此java代码等效的编码是什么&引用;Charles Okwuagwu“;。getBytes();

C#与此java代码等效的编码是什么&引用;Charles Okwuagwu“;。getBytes();,java,c#,string,Java,C#,String,假设我有一段Java代码:“Charles Okwuagwu”.getBytes() 在c#中,这只是编码.UTF8.GetBytes(“Charles Okwuagwu”) 我的问题是: 1) Java对字符串使用UTF16 2) sting内容基本上就是ASCII 简单地使用Encoding.ASCII.GetBytes(“Charles-Okwuagwu”)在c#中不是等价的吗 编辑 我在.net中运行了一个小测试: Console.WriteLine("Default:{0}", B2H

假设我有一段Java代码:
“Charles Okwuagwu”.getBytes()

在c#中,这只是
编码.UTF8.GetBytes(“Charles Okwuagwu”)

我的问题是: 1) Java对字符串使用UTF16 2) sting内容基本上就是ASCII

简单地使用
Encoding.ASCII.GetBytes(“Charles-Okwuagwu”)在c#中不是等价的吗

编辑 我在.net中运行了一个小测试:

Console.WriteLine("Default:{0}", B2H(Text.Encoding.Default.GetBytes("Charles Okwuagwu")))
Console.WriteLine("ASCII:{0}", B2H(Text.Encoding.ASCII.GetBytes("Charles Okwuagwu")))
Console.WriteLine("BigEndianUnicode:{0}", B2H(Text.Encoding.BigEndianUnicode.GetBytes("Charles Okwuagwu")))
Console.WriteLine("Unicode:{0}", B2H(Text.Encoding.Unicode.GetBytes("Charles Okwuagwu")))
Console.WriteLine("UTF32:{0}", B2H(Text.Encoding.UTF32.GetBytes("Charles Okwuagwu")))
Console.WriteLine("UTF7:{0}", B2H(Text.Encoding.UTF7.GetBytes("Charles Okwuagwu")))
Console.WriteLine("UTF8:{0}", B2H(Text.Encoding.UTF8.GetBytes("Charles Okwuagwu")))
结果:

Default:436861726C6573204F6B777561677775
ASCII:436861726C6573204F6B777561677775
BigEndianUnicode:0043006800610072006C006500730020004F006B007700750061006700770075
Unicode:43006800610072006C006500730020004F006B00770075006100670077007500
UTF32:430000006800000061000000720000006C0000006500000073000000200000004F0000006B000000770000007500000061000000670000007700000075000000
UTF7:436861726C6573204F6B777561677775
UTF8:436861726C6573204F6B777561677775

看起来UTF8、UTF7和ASCII给出了相同的字节。但是Java字符串默认为UTF16…

因为Java使用UTF16,所以等效的.Net代码是:

Encoding.Unicode.GetBytes("Charles Okwuagwu")
请参阅:

在Java中使用平台的默认编码。 因此,C#等价物是:

Encoding.Default.GetBytes("Charles Okwuagwu");

我相信它应该是
Encoding.Default.GetBytes(“charlesokwuagwu”)
。最好在两侧指定编码。在Java中,即“Charles Okwuagwu”.getBytes(“UTF-8”)
或您喜欢的任何编码。@rossum Java默认做什么?假设我将现有代码从Java移植到c#澄清了两件事:.NET还将UTF-16用于字符串。NET的
Encoding.Unicode
最好命名为
Encoding.UTF16LE
。如果我使用Encoding.ASCII,输出是否本质上不相同,因为文本仅包含ASCII字符您要求的等效代码。Unicode.GetBytes和ASCII.GetBytes的结果不同。Unicode:6701040970。。。ASCII:67 104 97…等效代码应该给出相同的结果,请参阅我对问题的编辑,以包括我运行的一些测试。Unicode会给我不同的bytes@CharlesOUTF-16和ascii将不等效。UTF-16每个字符将使用(至少)2个字节。在所有字符都是ascii码的特定情况下,每个字符将使用2个字节。@Gabe请参阅上面Brett的评论。我接受这个推理。我想这是正确的答案。