c# - Java 的 String.getByte() 与 C#

标签 c# java encoding windows-phone

我有一些使用 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/

相关文章:

c# - Debug 和 Release 之间有什么(性能)差异吗?

java - TreeMap 比较器没有给出预期的顺序?

javascript - 字符编码: â?

java - 检查 css 按钮是否被选择

java : How to determine the correct charset encoding of a stream

c# - SHA1Managed.ComputeHash 偶尔在不同的服务器上不同

c# - 无法关注 C# 中动态创建的列表框

c# - 打乱字符串,使相邻的两个字母不相同

c# - 基于属性的 webapi2 路由为某些方法返回 404

Java - 如何将网络掩码转换为位/长度