getBytes() не работает для кириллических букв

Я нашел несколько ответов, но ни один из них не работает для меня. Я хочу сделать pdf файл из html, но проблема в том, что мой html имеет кириллические буквы, и я обнаружил, что что-то делать с этим простым кодом:

String s = Здраво Крис;

байтовые байты [] = s.getBytes (UTF-8);

Строковое значение = новая строка (байты, ISO-8859-1);

// Я пробовал с новой строкой (байты, UTF-8), но это не сработало

Затем я передаю значение моей функции генератора pdf, но она выводит только ту часть строки s, которая не на кириллице, т.е. Kris

 htp.CreatePDF("<html><head><title>kristijan</title></head><body><h1>" + value + "</h1></body></html>", "kris");

person Kristijan Iliev    schedule 29.12.2014    source источник
comment
попробуй это byte[] bytes = s.getBytes("ISO-8859-1");   -  person Abhishek    schedule 29.12.2014
comment
Вы пробовали с String s? htp.CreatePDF("<html><head><title>kristijan</title></head><body><h1>" + s + "</h1></body></html>", "kris"); также CreatePDF выглядит как C#, а не Java.   -  person Elliott Frisch    schedule 29.12.2014
comment
Я заметил, что неправильно расставил скобки, но снова не работает   -  person Kristijan Iliev    schedule 29.12.2014
comment
Строковые объекты в Java всегда неявно кодируются в UTF-16. Вы не можете изменить эту кодировку.   -  person Abhishek    schedule 29.12.2014
comment
Это java, и он не работает с передачей только s   -  person Kristijan Iliev    schedule 29.12.2014
comment
Что это за библиотека?   -  person laune    schedule 29.12.2014
comment
Ожидали ли вы, что выбор другой кодировки автоматически переводит Kris в кириллицу? Это не то, как работают кодировки символов.   -  person Jesper    schedule 29.12.2014
comment
Jesper, проблема не в конвертации Kris в кириллицу, проблема в том, что перед этим какой-то текст на кириллице не печатается в pdf. Ни один кириллический текст не отображается, вот в чем проблема   -  person Kristijan Iliev    schedule 29.12.2014
comment
Я использую этот com.itextpdf.text.pdf.PdfWriter;, и он отлично работает с латиницей.   -  person Kristijan Iliev    schedule 29.12.2014
comment
CreatePDF не является методом PdfWriter. Как это закодировано?   -  person laune    schedule 29.12.2014
comment
Затем я передаю значение своей функции генератора PDF. Рассматривали ли вы возможность того, что ваша функция генератора PDF не может создавать кириллические глифы? Возможно, он создает PDF с использованием шрифта без кириллических глифов.   -  person mkl    schedule 29.12.2014


Ответы (2)


Пожалуйста, взгляните на мой ответ на этот вопрос: Не могу получить чешский символов при создании PDF

Несколько вещей могут пойти не так в вашем коде.

Это очень плохая идея:

String s = "Здраво Kris";

Предположим, вы отправляете свой файл .java, включая этот код, кому-то, кто сохраняет его как ASCII, тогда ваш исходный код изменится на это:

String s = "Здраво Kris";

Я также видел, как это происходило при сохранении документа в системе управления версиями.

Вывод: никогда не используйте специальные кодировки при написании исходного кода с жестко заданными строками. Либо сохраните строки в файле, используя правильную кодировку для записи и чтения строки, либо используйте нотацию Unicode, если вы настаиваете на жестком кодировании данных в исходном коде.

Даже если вы правильно сохраните файл, содержащий эту строку, вы должны быть очень осторожны при компиляции кода. Если компилятор использует другую кодировку, s тоже будет поврежден.

Вы также должны убедиться, что вы правильно читаете данные при преобразовании HTML в PDF. Я предполагаю, что вы используете XML Worker (а не устаревший класс HTMLWorker). Существуют разные места, где вы можете указать, какую кодировку использовать.

Наконец, вы должны убедиться, что используете шрифт, который поддерживает символы кириллицы. Например: если вы используете шрифт Helvetica по умолчанию, ничего не будет отображаться.

Вы также можете найти эту информацию в бесплатной электронной книге Лучшие вопросы iText на StackOverflow .

person Bruno Lowagie    schedule 29.12.2014

Один из способов обойти неспособность (?) createPDF обрабатывать полный диапазон символов Юникода в Java (!) состоит в том, чтобы исследовать

String s = "Здраво Kris";

для символов больше 0x80. Они должны быть заменены соответствующим числовым объектом HTML.

Вы можете легко убедиться в этом, установив String для этих сущностей и посмотреть, что произойдет, если эта строка будет внедрена.

person laune    schedule 29.12.2014