使用八进制ASCII代码处理字符串(在Java中)

时间:2014-09-13 10:07:36

标签: java ascii

我在使用包含以下字符串的文本文件时遇到了一些问题:     Grandchamp乐-CH \ 303 \ 242teau

顺便说一句,这是维基百科页面的名称。两个asciis代表“â”我认为。

是否有任何软件可以轻松地将上面的字符串转换为     格朗德尚莱沙托 或者可能     Grandchamp乐-CH%C3%A2teau

我更喜欢java absed解决方案,但任何其他想法也是如此! 非常感谢任何建议或暗示!

2 个答案:

答案 0 :(得分:2)

这是实现目标的一种轻微的方法:

final String name = "Grandchamp-le-Ch\\303\\242teau";
final Matcher m = Pattern.compile("\\\\(\\d{3})").matcher(name);
final StringBuffer out = new StringBuffer();
while (m.find()) m.appendReplacement(out, String.valueOf((char)parseInt(m.group(1), 8)));
m.appendTail(out);
final String decoded = new String(out.toString().getBytes(ISO_8859_1), UTF_8);
System.out.println(decoded);

工作原理:

  1. 正则表达式匹配八进制字符表示法;
  2. 通过将每个这样的八进制表示法替换为数字值等于该八进制数的char来转换原始字符串;
  3. 新字符串(现在处于“mojibake”状态)被写为字节,使用单字节编码(任何都可以,但ISO_8859_1恰好是标准的);
  4. 重新读取字节,现在假设它们是UTF-8编码的字符串。
  5. 代码将打印出来

    Grandchamp-le-Château
    

答案 1 :(得分:-1)

你在这里:

String myString = "Grandchamp-le-Ch\303\242teau";
byte[] byteArray = myString.getBytes("ISO-8859-1");
String result = new String(byteArray, "UTF-8");
System.out.println(result);

打印:

Grandchamp-le-Château