Как SourceForge искалечил этого персонажа Unicode? - PullRequest
1 голос
/ 13 марта 2011

Небольшая головоломка для вас.

Комментарий к элементу трекера SourceForge содержит символ U + 2014 , EM DASH, который отображается веб-интерфейсом как как и должно быть.

В экспорте XML, однако, он отображается как:

—

Декодирование сущностей, что приводит к следующим кодам:

U+00E2 U+20AC U+201D

Т.е. символы —.XML должен был быть —, десятичное представление 0x2014, так что это, вероятно, ошибка в экспортере SF.net.

Теперь я пытаюсь изменить процесс, но не могу найтиспособ получить вышеуказанный вывод из этого символа Unicode, независимо от того, какую ошибочную последовательность кодирования / декодирования я пробую.Есть идеи, что здесь произошло и как повернуть процесс вспять?

Ответы [ 2 ]

4 голосов
/ 13 марта 2011

Вывод XML неправильно закодирован с использованием CP1252. Чтобы восстановить это, преобразуйте — в байты с использованием кодировки CP1252, а затем преобразуйте эти байты обратно в строку / символ с использованием кодировки UTF-8.

Доказательства на основе Java:

String s = "—";
System.out.println(new String(s.getBytes("CP1252"), "UTF-8")); // —

Обратите внимание, что это предполагает, что консоль stdout использует UTF-8 для отображения символа.

1 голос
/ 13 марта 2011

В .Net, Encoding.UTF8.GetString(Encoding.GetEncoding(1252).GetBytes("—")) возвращает .

SourceForge преобразовал его в UTF8, интерпретировал каждый из байтов как символы в CP1252, затем сохранил символы как три отдельных объекта, используя фактические кодовые точки Unicode для этих символов.

...