Проблемы с кодированием - PullRequest
2 голосов
/ 14 июня 2011

Наличие проблемы со строкой Java, используемой для электронных писем в исходном файле Java.Строка содержит «Protégé».Наша серверная среда, исходя из того, что я смог определить, использует UTF-8.

Так что я преобразовал его в «Protégé» для UTF-8.Он отлично работает на нашем сервере, но когда я запускаю его локально, он не переводится должным образом.Поэтому я изменил Eclipse, чтобы использовать UTF-8 в настройках, но он не переводит его локально.По-прежнему показывает "Protégég".Есть идеи?

Из комментариев:

Я запустил это локально и на нашем сервере:

OutputStreamWriter out = new OutputStreamWriter(new ByteArrayOutputStream());
System.out.println(out.getEncoding());

И он отображает Cp1252локально и UTF-8 на нашем сервере JBoss.У нас изначально была строка с «Protégé», но на JBoss она показывает только «Prot».

Когда я использую "Prot\u00e9g\u00e9", она работает локально, но при запуске на нашем сервере показывает «Protg».

Ответы [ 2 ]

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

Если строка содержит "Prot\u00e9g\u00e9", это исключает проблему с кодировкой компилятора (как указано в SyntaxT3rr0r), поскольку теперь она является правильной в строке Java (если нет ошибки компилятора, которую я хотел быне предполагается).

Таким образом, у нас есть проблема между выводом, передачей и отображением.Как вы смотрите на вывод с вашего сервера?Возможно, что где-то есть какая-то перекодировка, которая разрушает ваши строки.Или что где-то некоторые выходные данные объявлены неправильно.

Если вы используете окно терминала / команды для просмотра выходных данных, рассмотрите возможность установки его в UTF-8 перед подключением к серверу.


И да, Java использует внутренне UTF-16 для строк, но некоторую системно-зависимую кодировку как кодировку по умолчанию для компилятора, так и кодировку по умолчанию для OutputStreamWriter / InputStreamReader и нескольких других API, которые преобразуют строки и байты.Похоже, это UTF-8 на сервере и Windows-1252 на вашей клиентской системе.Здесь это не должно иметь большого значения.

0 голосов
/ 16 сентября 2014

Попробуйте это:

    MimeMessage msg = new MimeMessage(session);
    MimeBodyPart mbp1 = new MimeBodyPart();
    mbp1.setDataHandler(new DataHandler(new ByteArrayDataSource(message.toString, "text/html")));        
    mbp1.setContent(new String(message.getBytes("UTF-8"),"ISO-8859-1"), "text/html");
    Multipart mp = new MimeMultipart();
    mp.addBodyPart(mbp1);
    msg.setContent(mp, "text/html");

вместо набора ISO-8859-1 установите свой языковой набор символов

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