2015-01-01 83 views
-1

說我有這個代碼的Java:"Charles Okwuagwu".getBytes();在C#哪種編碼與C#等價於此Java代碼? 「Charles Okwuagwu」.getBytes();

這簡直是Encoding.UTF8.GetBytes("Charles Okwuagwu");

我的問題是這樣的: 1)Java使用字符串 2)UTF16刺痛內容基本上是ASCII

在c#中使用Encoding.ASCII.GetBytes("Charles Okwuagwu");不等於嗎?

編輯 我跑在.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字符串默認爲UTF-16 ...

+0

我相信這將是'Encoding.Default.GetBytes( 「查爾斯Okwuagwu」);'。 –

+3

更好地指定雙方的編碼。在Java中,「Charles Okwuagwu」.getBytes(「UTF-8」);或者其他任何你喜歡的編碼。 – rossum

+0

@rossum默認情況下,Java做了什麼?說我正在從Java移植現有的代碼到C# –

回答

2

在Java中String.getBytes使用平臺的默認編碼。 所以C#相當於是:

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

我接受這個推理。這是我猜的正確答案。 –

0

由於Java使用UTF-16,等效的.Net代碼如下:

Encoding.Unicode.GetBytes("Charles Okwuagwu") 

參見:http://msdn.microsoft.com/en-us/library/system.text.encoding.unicode(v=vs.110).aspx

+0

如果我使用Encoding.ASCII,輸出不會基本相同,因爲文本只包含Ascii字符 –

+0

您要求提供equivelant代碼。 Unicode.GetBytes和ASCII.GetBytes的結果不一樣。 Unicode:67 0 104 0 97 0 ... ASCII:67 104 97 ... – Gabe

+0

等效代碼應該給出相同的結果,請參閱我編輯的問題以包含我跑過的一些測試。 Unicode會給我不同的字節 –