Обработка французских символов в Java - PullRequest
6 голосов
/ 02 июня 2011

У меня есть страница, где я ищу термин, и он отображается идеально. Независимо от типа персонажа.

Теперь, когда у меня есть несколько флажков в JSP, я проверяю их и отправляю В этих флажках у меня есть одно имя, например ABC Farmacéutica Corporation.

Когда я нажимаю кнопку «Отправить», я вызываю функцию, задаю все параметры формы и отправляю эту форму. (Я проверял выставление оповещения о показе специальных символов перед отправкой, и он отображается хорошо).

Теперь, заканчивая Java, я использую работу Springs Frame. Когда я печатаю термин в контроллере, он отображается как ABC Farmacéutica Corporation.

Пожалуйста, помогите ... Заранее спасибо.

РЕДАКТИРОВАТЬ:

Пожалуйста, попробуйте этот пример Пример

import java.net.*;
class sample{
    public static void main(String[] args){
        try{
            String aaa = "ABC Farmacéutica Corporation";
            String bbb = "ABC Farmacéutica Corporation";

            aaa = URLEncoder.encode(aaa, "UTF-8");
            bbb = URLDecoder.decode(bbb, "UTF-8");

            System.out.println("aaa   "+aaa);
            System.out.println("bbb   "+bbb);

        }catch(Exception e){
            System.out.println(e);      
        }
    }
}

Я получаю вывод как,

aaa   PiSA+Farmac%C3%A9utica+Mexicana+Corporativo
bbb   PiSA Farmacéutica Mexicana Corporativo

Попробуйте напечатать string aaa как есть.

Ответы [ 5 ]

10 голосов
/ 02 июня 2011

Вы получаете "ABC Farmacéutica Corporation", поскольку строка, которую вы получаете от клиента, - ISO-8859-1, вам необходимо преобразовать ее в UTF-8, прежде чем URL-адрес расшифрует ее. Как это:

bbb = URLDecoder.decode(new String(bbb.getBytes("ISO-8859-1"), "UTF-8"), "UTF-8");

ПРИМЕЧАНИЕ : некоторые кодировки не могут быть преобразованы из и в другие кодировки без риска потери данных. Например, вы не можете конвертировать символы Thaï (TIS-620) в другую кодировку, даже UTF-8. По этой причине избегайте преобразования из одной кодировки в другую , за исключением случаев, когда это абсолютно необходимо (т. Е. Данные поступают из внешнего, стороннего или частного источника и т. Д.). Это только решение о том, как преобразовать из одного источника в другой, зная кодировку источника.

2 голосов
/ 02 июня 2011

Это проблема кодирования, и Ã четко указывает, что это текст UTF-8, интерпретируемый как ISO-Latin-1 (или один из его двоюродных братьев).

Убедитесь, что на вашей JSP-странице вверху показано, что она использует кодировку UTF-8.

1 голос
/ 02 июня 2011

Насколько я понимаю, текст жестко закодирован в коде контроллера следующим образом:

    ModelAndView mav = new ModelAndView("hello");
    mav.addObject("message", "ABC Farmacéutica Corporation");
    return mav;

Я ожидаю, что это будет работать:

    ModelAndView mav = new ModelAndView("hello");
    mav.addObject("message", "ABC Farmac\u00e9utica Corporation");
    return mav;

Если это так, проблема связана снесоответствие между кодировкой символов, используемой вашим редактором Java, и кодировкой, используемой вашим компилятором для чтения исходного кода.

Например, если ваш редактор сохраняет файл Java как UTF-8 и вы компилируете в системе, гдеUTF-8 не является кодировкой по умолчанию , поэтому вам необходимо указать вашему компилятору использовать эту кодировку:

javac -cp foo.jar -encoding UTF-8 Bar.java

Ваши скрипты сборки и настройки IDE должны быть согласованы при обработке символовdata.

Если ваш текстовый редактор сохранил ваш файл как UTF-8, то в шестнадцатеричном редакторе é будет байтовой последовательностью C3 A9;во многих других кодировках оно будет иметь значение E9.ISO-8859-1 и windows-1252 закодировали бы C3 A9.Вы можете прочитать о кодировке символов в исходных файлах Java здесь .

1 голос
/ 02 июня 2011

Я подозреваю, что проблема с кодировкой символов на странице.Убедитесь, что страница, которую вы отправляете, и та, которую вы отображаете, используют один и тот же набор символов, и убедитесь, что вы установили ее явно.например, если ваш сервер работает в Linux, кодировкой по умолчанию будет UTF-8, но если вы просматриваете страницу в Windows, он будет считать (если кодировка не указана), что это ISO-8859-1.Кроме того, когда вы получаете отправленный текст на стороне сервера, сервер будет использовать набор символов по умолчанию при построении строки - тогда как ваш пользователь мог использовать другую кодировку, если вы ее не указали.

0 голосов
/ 24 мая 2018

Измените кодировку страницы jsp на UTF-8 в меню «Файл»> «Свойства», затем добавьте эту строку в заголовок своей страницы jsp: <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...