«En dash» искажается во время обработки http-ответа или манипулирования текстом - PullRequest
2 голосов
/ 30 июня 2011

Я пишу код для работы с текстом из Википедии, и у меня возникают проблемы с искажением штрихов.Раньше я не работал с черточками или другими нестандартными символами (нестандартным для меня является символ, которого нет на моей клавиатуре;), поэтому я не уверен, куда указывать пальцем на то, что яделать неправильно.Вот что происходит вместе с фрагментами кода .....

Я отправляю запрос в Википедию (я использую клиентский API Apache HttpComponents для связи с Википедией) для получения содержимого статьи и сохраняю его.в строке:

DefaultHttpClient client = new DefaultHttpClient();
HttpGet queryRequest = new HttpGet(query);  // query is the URL for retrieving the article contents.
ResponseHandler<String> responseHandler = new BasicResponseHandler();
String responseBody = client.execute(queryRequest, responseHandler);

На этом этапе, если я отправлю «responseBody» в System.out, в моей консоли Eclipse отображаются черточки «?».Это может быть просто проблема с отображением консоли Eclipse, поэтому я продолжу.

Я манипулирую текстом, игнорируя дефисы, а затем отправляю текст обратно в Википедию.

List<NameValuePair> postParams = new ArrayList<NameValuePair>();
postParams.add(new BasicNameValuePair("text", content);  // content is a String with the article text
UrlEncodedFormEntity entity = new UrlEncodedFormEntity(postParams, "UTF-8");
HttpPost queryRequest = new HttpPost(url);  // url is the basic URL for the Wikipedia api
queryRequest.setEntity(entity);
queryRequest.addHeader("Content-Type", "application/x-www-form-urlencoded");
ResponseHandler<String> responseHandler = new BasicResponseHandler();
String responseBody = client.execute(queryRequest, responseHandler);

Когда текст, который теперь загружен в Википедию, отображается в веб-браузере, то, что раньше было черточками, теперь отображается как «?»в коробке (неизвестный персонаж?).Поэтому где-то я случайно меняю или неправильно кодирую штрихи, но я точно не знаю, где именно.

Может ли кто-нибудь указать мне правильное направление?

Ответы [ 2 ]

1 голос
/ 05 июля 2011

Теперь за реальный ответ. Проблема с искажением неанглоязычных символов не имела ничего общего с HTTPComponents Apache или с обработкой / манипулированием строк Java. Проблема была в Eclipse IDE, работающем в Windows.

Eclipse в конфигурации запуска по умолчанию использует системный метод кодировки по умолчанию, Cp1252 для Windows. Поскольку Cp1252 не поддерживает все символы UTF-8, возникают проблемы. Я нашел решение здесь . В Eclipse вы переходите в настройки запуска. Для проекта, который вы пытаетесь запустить, перейдите на вкладку «Общие». Есть раздел для кодирования. Измените его с «По умолчанию» на «Другое» и установите кодировку UTF-8.

Теперь все хорошо.

0 голосов
/ 02 июля 2011

Мне еще предстоит выяснить, почему эндаш изуродован.Между тем у меня есть (возможно, заумное) исправление.

String unknownUTF = String.copyValueOf(Character.toChars(65533));
content = content.replace(unknownUTF, "\u2013");

Я в основном заменяю все экземпляры «неизвестного» символа UTF-8 символом endash.Это работает при условии, что исходный контент не содержит других символов UTF-8, которые преобразуются в «неизвестный» символ.

...