У меня есть строка, которая используется, чтобы быть XML-тег, где mojibakes содержатся:
<Applicant_Place_Born>Москва</Applicant_Place_Born>
Java преобразовать кодирующий
Я знаю, что точно такая же строка, но в правильной кодировке является:
<Applicant_Place_Born>Москва</Applicant_Place_Born>
I знайте это, потому что, используя утилиту Tcl, я могу преобразовать ее в правильную строку:
# The original string
set s "Москва"
# substituting the html escapes
set t "Ð\x9cоÑ\x81ква"
# decode from utf-8 into Unicode
encoding convertfrom utf-8 "Ð\x9cоÑ\x81ква"
Москва
Я пробовал различные варианты:
System.out.println(new String(original.getBytes("UTF-8"), "CP1251"));
но у меня всегда были другие мохибэки или вопросительные знаки вместо символов.
В: Как я могу сделать то же, что и Tcl, но используя код Java?
EDIT:
Я попытался подход @Joop Эгген в:
import org.apache.commons.lang3.StringEscapeUtils;
public class s {
static String s;
public static void main(String[] args) {
try {
System.setProperty("file.encoding", "CP1251");
System.out.println("JVM encoding: " + System.getProperty("file.encoding"));
s = "Москва";
System.out.println("Original text: " + s);
s = StringEscapeUtils.unescapeHtml4(s);
byte[] b = s.getBytes(StandardCharsets.ISO_8859_1);
s = new String(b, "UTF-16BE");
System.out.println("Result: " + s);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
Конвертируемая строка была что-то Chineese:
JVM encoding: CP1251 Original text: Москва Result: 킜킾톁킺킲킰
Вы сбросили ')' на третьей строчке :) – jkeuhlen
@jkeuhlen спасибо, мой ответ до сих пор является весьма неопределенным, как строки содержимое перепутано. Возможно, ваш ответ помогает лучше. –
@JoopEggen Я изменил 'string = new String (b," UTF-16BE ");' to 'string = new String (b," UTF-8 ");' и это сработало. Спасибо. – griboedov