gpt4 book ai didi

java - ISO-8859-1编码和二进制数据保存

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:05:04 25 4
gpt4 key购买 nike

我读了 comment @Esailija 对我的一个问题的回答

ISO-8859-1 is the only encoding to fully retain the original binary data, with exact byte<->codepoint matches

我也读过这个answer作者 @AaronDigulla:

In Java, ISO-8859-1 (a.k.a ISO-Latin1) is a 1:1 mapping

我需要对此有所了解。这将失败(如图所示 here ):

// \u00F6 is ö
System.out.println(Arrays.toString("\u00F6".getBytes("utf-8")));
// prints [-61, -74]
System.out.println(Arrays.toString("\u00F6".getBytes("ISO-8859-1")));
// prints [-10]

问题

  1. 我承认我不太明白 - 为什么它没有得到上面代码中的字节
  2. 最重要的是,这是哪里(字节保留行为 ISO-8859-1)指定 - 源链接或 JSL 会很好。它是唯一具有此属性的编码吗?
  3. 是否与 ISO-8859-1 相关 default default

另见 this question来自其他字符集的很好的反例。

最佳答案

"\u00F6" 不是字节数组。它是一个包含单个字符的字符串。改为执行以下测试:

public static void main(String[] args) throws Exception {
byte[] b = new byte[] {(byte) 0x00, (byte) 0xf6};
String s = new String(b, "ISO-8859-1"); // decoding
byte[] b2 = s.getBytes("ISO-8859-1"); // encoding
System.out.println("Are the bytes equal : " + Arrays.equals(b, b2)); // true
}

要检查这对任何字节是否成立,只需改进代码以遍历所有字节:

public static void main(String[] args) throws Exception {
byte[] b = new byte[256];
for (int i = 0; i < b.length; i++) {
b[i] = (byte) i;
}
String s = new String(b, "ISO-8859-1");
byte[] b2 = s.getBytes("ISO-8859-1");
System.out.println("Are the bytes equal : " + Arrays.equals(b, b2));
}

ISO-8859-1 是一种标准编码。所以使用的语言(Java、C# 或其他语言)并不重要。

这是一个 Wikipedia reference声称每个字节都被覆盖:

In 1992, the IANA registered the character map ISO_8859-1:1987, more commonly known by its preferred MIME name of ISO-8859-1 (note the extra hyphen over ISO 8859-1), a superset of ISO 8859-1, for use on the Internet. This map assigns the C0 and C1 control characters to the unassigned code values thus provides for 256 characters via every possible 8-bit value.

(强调我的)

关于java - ISO-8859-1编码和二进制数据保存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15925458/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com