Java的String.getByte()vs C#

时间:2014-05-12 13:16:37

标签: c# java encoding windows-phone

我在Java中有一些使用

的代码
String.getBytes() 

(没有编码参数)在某个生成的字符串上获取byte[],我后来将其用作AES加密的密钥。

然后我接受编码消息并在C#(WP7 / WP8环境)下我需要解码它。 我可以轻松生成我在Java应用程序中使用的字符串,但是我需要将其转换为byte[],以便生成与Java中完全相同的字节数组。

问题1: 我可以不改变Java代码吗?

问题2: 如果没有,我应该如何实现这两个版本,以便它们总是返回相同的byte[],无论如何?

1 个答案:

答案 0 :(得分:6)

基本上,您应该在Java代码中指定编码。目前,您的代码将在不同系统上生成不同的输出,因为它使用平台默认编码(例如Windows-1252或UTF-8)。

我鼓励你在两种情况下使用UTF-8:

// Java 7 onwards
byte[] bytes = text.getBytes(StandardCharsets.UTF_8);

// Java pre-7
byte[] bytes = text.getBytes("UTF-8");

// .NET
byte[] bytes = Encoding.UTF8.GetBytes(text);

使用UTF-8可以将所有有效的Unicode字符串编码为字节。您可以考虑使用UTF-16,但是您需要确保在每种情况下指定相同的字节序。这样做的好处是每个char只有两个字节,不管内容如何(因为char是Java和.NET中的UTF-16代码单元)。