提问人:user273121 提问时间:6/20/2023 最后编辑:skomisauser273121 更新时间:6/21/2023 访问量:65
无法解码 Java UTF8
Unable to decode Java UTF8
问:
我对 Java 程序的输入是 years ネン 日语字符串的字符代码。我需要把它转换回日语。 我尝试了getBytes(UTF8),但无法成功将其转换回日语。你能帮忙吗
我尝试了getBytes(UTF8)。
我的输入是对应于日文字符“年ネン”。年 ネン
答:
0赞
skomisa
6/21/2023
#1
我不知道有任何 JDK 方法可以解决您的问题,但您可以使用 Apache 的 StringEscapeUtils.unescapeHtml4() 方法在一行中完成,而且代码很简单。下面是使用示例数据的示例:
import org.apache.commons.text.StringEscapeUtils;
public class Main {
public static void main(String[] args) throws Exception {
String input = "年 ネン";
System.out.println("input=[" + input + "]");
String output = StringEscapeUtils.unescapeHtml4(input);
System.out.println("output=[" + output + "]");
}
}
输出如下:
input=[年 ネン]
output=[年 ネン]
我在 Intellij IDEA 中使用 JDK 20 运行代码。
另一种纯 Java 方法是自己编写代码(但何必呢?
- 使用 StringTokenizer 从输入中提取每个数字代码点。
- 使用 Character.toString(int codePoint) 将每个提取的代码点转换为一个字符。
笔记:
- javadoc for 没有明确声明它支持您指定格式的数字实体,但它似乎工作正常。
unescapeHtml4()
- 该类可以在 和 中找到。请务必使用实现。
StringEscapeUtils
org.apache.commons.text
org.apache.commons.lang
org.apache.commons.text
- 您需要下载 Apache Commons 文本库并将其添加到您的项目中,然后导入您的代码。
org.apache.commons.text.StringEscapeUtils;
- 您还需要下载 Apache Commons Lang 库并将其添加到您的项目中。否则,您将在运行时得到一个。
java.lang.ClassNotFoundException: org.apache.commons.lang3.Range
- 输入中的任何空格都将保留在输出中。
unescapeHtml4()
1赞
g00se
6/21/2023
#2
正如@skomisa所说,为此使用一个合适的库可能更好,但如果你想要一些快速和肮脏的东西,那么:
import java.util.Arrays;
public class DecimalEntityDecoder {
public static void main(String[] args) {
try {
String decimalEntities = args[0];
String output = Arrays.stream(decimalEntities.replaceAll("\\s+", "").split(";")).
map(s ->s.replaceAll("\\D", "")).
mapToInt(Integer::valueOf).
collect(StringBuilder::new, StringBuilder::appendCodePoint, StringBuilder::append).
toString();
System.out.println(output);
}
catch(Throwable t) {
t.printStackTrace();
}
}
}
评论
0赞
skomisa
6/21/2023
这很好用,我现在认为你的快速和肮脏的方法可能比使用库更好。OP 中的示例数据是干净的,但如果输入有问题,完全控制过程是件好事。
评论