【问题标题】:Java Split ISO-8859-1 String with "broken vertical bar"Java 拆分 ISO-8859-1 字符串,带有“断开的竖线”
【发布时间】:2016-04-02 11:36:30
【问题描述】:

我从第三个系统读取了一个 ISO-8859-1 编码的字符串。我必须用字符 ¦ 分割这个字符串。此字符在 ISO-8859-1 中的值为 166。 以下代码不起作用,因为 ¦ 在 Java (UTF-8) 中的值为 65533。

String [] parts = isoString.split("¦");

我被卡住了...我该如何解决这个问题? 谢谢

【问题讨论】:

  • 根据en.wikipedia.org/wiki/…,这个字符在unicode中是U+00A6(十进制是166)。所以你可以简单地使用.split("\u00a6")
  • Java 中没有“ISO-8859-1 编码的字符串”之类的东西。所以我认为你真正的问题可能是你没有正确解码来自任何来源的字符串。但是我们不能说,因为你只显示了一行代码,没有上下文。
  • 虽然也有可能您没有使用正确的编码编译程序,但您传递给split() 的字符串并不是您想的那样它是。在这种情况下,JB Nizet 的答案将起作用(它也是 imo 在任何程序中引用非 ASCII 字符的最佳方式)。

标签: java string utf-8 split iso-8859-1


【解决方案1】:

工作代码:

String s = new String(new byte[] {'a', 'b', (byte) 166, 'c', 'd'}, 
                      StandardCharsets.ISO_8859_1);
String[] split = s.split("\u00a6");
System.out.println("split = " + Arrays.toString(split));
// prints split = [ab, cd]

【讨论】:

    【解决方案2】:

    您首先需要 properly decode your ISO-8859-1 string into a Unicode representation 以便您可以使用您提供的 Unicode 字符串文字 (|) 来拆分它——当然假设您正在使用 Unicode 编码编译程序。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-01-19
      • 2023-04-08
      • 2020-01-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-02
      • 1970-01-01
      相关资源
      最近更新 更多