当前位置: 首页 > 面试题库 >

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

余信然
2023-03-14
问题内容

我在评论 @Esailija回答我的一个问题时读到

ISO-8859-1是唯一完全保留原始二进制数据的编码,其字节<->代码点精确匹配

我也在@AaronDigulla的这个答案中读到:

在Java中,ISO-8859-1(也称为ISO-Latin1)是1:1映射

我需要对此有一些了解。这将失败:

// \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作为默认默认?

问题答案:

"\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参考,声称每个字节都被覆盖:

在1992年,IANA注册了字符映射图ISO_8859-1:1987,它以其首选的MIME名称ISO-8859-1(请注意ISO
8859-1的额外连字符)而广为人知,ISO 8859-1是ISO 8859-1的超集。在互联网上使用。该映射将C0和C1控制字符分配给未分配的代码值,
从而通过每个可能的8位值提供256个字符。

(强调我的)



 类似资料:
  • 我在Spring项目中遇到编码问题。现在我使用 -Dfile.encoding=ISO-8859-1 参数运行 jvm (tomcat)。在我的.jsp文件中有几行: 在 Web 中.xml我定义了编码过滤器 但当我用波兰语字母łśżź传递值时,我遇到了一个问题。在我的java控制器中,打印(并保存在DB中)的值是用html代码代替抛光字母。例如 aaalł保存为aaal[am]#322;[上午]

  • 主要内容:ISO-8859-1,HTML 预留字符,ISO 8859-1 字符实体现代的浏览器支持的字符集: ASCII 字符集 标准 ISO 字符集 数学符号、希腊字母、其他符号 ISO-8859-1 ISO-8859-1 是大多数浏览器默认的字符集。 ISO-8859-1 的较低部分(从 1 到 127 之间的代码)是最初的 ASCII 字符集(0-9 的数字,大写和小写英文字母表,以及一些特殊字符)。 ISO-8859-1 的较高部分(从 160 到 255 之间的代码)

  • Unicode是ISO-8859-1的超集,因此前256个Unicode字符对应于ISO-8859-1。

  • 我有一个Android应用程序,它读取带有SQL脚本的文件,将数据插入SQLite数据库。然而,我需要知道这个文件的详细编码,我有一个从SQLite读取信息的EditText,如果编码不正确,它将显示为无效字符,如“?”而不是像“ç,í,ã”这样的字符。 我有以下代码: 这适用于“ISO-8859-1”编码,如果我将“UTF-8”设置为字符集,则适用于UTF-8。我需要以编程方式检测字符集编码(U

  • 我在Java应用程序中遇到字符串编码的问题。我的Informix数据库有ISO-8859-2编码。我在连接字符串中设置了。我的连接URL如下所示: 从数据库中选择数据后,Java字符串不能识别波兰特殊字符。方法返回代码。

  • 问题内容: 我有一个编码为iso-8859-1的文件,其中包含诸如ô的字符。 我正在用Java代码读取此文件,例如: 但是ô字符总是乱码,通常打印为?。。 我已经读过这个主题(并且在途中学到了一点),例如 http://www.joelonsoftware.com/articles/Unicode.html http://bugs.sun.com/bugdatabase/view_bug.do?b