StringEscapeUtils不处理utf-8

问题描述 投票:1回答:1

我有这样的字符串

String incoming = "<html> <head></head> <body>  <p><span style=\"font-family: Arial;\">Ευχαριστώ (eff-kha-ri-STOE) Tι κανείς (tee-KAH-nis)? Mε συγχωρείτε.</span></p> </body></html>";

并且我正在使用StringEscapeUtils对其进行转义

import org.apache.commons.text.StringEscapeUtils;
String escaped = StringEscapeUtils.escapeJava(incoming);

结果是

<html> <head></head> <body>  <p><span style=\"font-family: Arial;\">\u0395\u03C5\u03C7\u03B1\u03C1\u03B9\u03C3\u03C4\u03CE (eff-kha-ri-STOE) T\u03B9 \u03BA\u03B1\u03BD\u03B5\u03AF\u03C2 (tee-KAH-nis)? M\u03B5 \u03C3\u03C5\u03B3\u03C7\u03C9\u03C1\u03B5\u03AF\u03C4\u03B5.</span></p> </body></html>

我已经尝试通过获取字节将其转换为utf-8,但无法正常工作,有什么办法可以修复它?

这是我尝试过的:

String s = new String(escaped.getBytes(“ UTF-8”),“ UTF-8”);

我也尝试过使用其他库来转义文本,但这仍然行不通。

java arrays unicode utf-8 apache-commons
1个回答
1
投票
我假设您要对输入String中的单引号,双引号和反斜杠等字符进行转义,但希望希腊字符保持不变。

[不幸的是StringEscapeUtils.escapeJava()会将具有Unicode值> 0x7f的所有文本字符转换为它们的Unicode Escape等效项。例如,您的样本数据显示希腊字母tau(τ)在\u03C4返回的字符串中转义为StringEscapeUtils.escapeJava()。我不知道为什么escapeJava()这样做。 Its Javadoc指出“

使用Java字符串规则转义字符串中的字符。

”,但我找不到“ Java字符串规则
© www.soinside.com 2019 - 2024. All rights reserved.