我有一些使用 Java 的代码
String.getBytes()
(不带编码参数)在一些生成的字符串上获取 byte[]
,我稍后将其用作 AES 加密的 key 。
然后我获取编码后的消息,并在 C#(WP7/WP8 环境)下对它进行解码。
我可以很容易地生成我在 Java 应用程序中使用的字符串,但是我需要将其转换为 byte[]
,以便它生成与 Java 中完全相同的字节数组。
问题一: 我可以在不更改 Java 代码的情况下执行此操作吗?
问题二:
如果不是,我应该如何实现这两个版本,以便它们无论如何都会返回相同的 byte[]
?
最佳答案
基本上,您应该在 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 代码单元)。
关于c# - Java 的 String.getByte() 与 C#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23610130/