gpt4 book ai didi

java - 处理带有八进制 ASCII 代码的字符串(在 Java 中)

转载 作者:行者123 更新时间:2023-12-01 12:32:40 24 4
gpt4 key购买 nike

我在处理包含如下字符串的文本文件时遇到了一些问题: Grandchamp-le-Ch\303\242teau

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

有没有什么软件可以轻松将上面的字符串转换成 格兰尚城堡或者可能 Grandchamp-le-Ch%C3%A2teau

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

最佳答案

这是实现您的目标的一种稍微有点古怪的方法:

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. 通过将每个这样的八进制表示法替换为数值等于该八进制数的字符来转换原始字符串;
  3. 新字符串(现在处于“mojibake”状态)使用单字节编码(任何都可以,但 ISO_8859_1 恰好是标准编码)以字节形式写出;
  4. 重新读取字节,现在假设它们是 UTF-8 编码的字符串。

代码将打印出来

Grandchamp-le-Château

关于java - 处理带有八进制 ASCII 代码的字符串(在 Java 中),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25822102/

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