java - getBytes() 不适用于西里尔字母

标签 java pdf-generation cyrillic

我找到了一些答案,但没有一个适合我。我想从 html 制作一个 pdf 文件,但问题是我的 html 有西里尔字母,我发现这个简单的代码与此有关:

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

byte bytes[] = s.getBytes("UTF-8");

String value = new String(bytes, "ISO-8859-1");

// I tried with new String(bytes, "UTF-8") but it didn't work

然后我将值传递给我的 pdf 生成器函数,但它仅输出字符串 s 中非西里尔字母的部分,即 Kris

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

最佳答案

请看一下我对这个问题的回答:Can't get Czech characters while generating a PDF

您的代码中可能会出现一些问题。

这是一个非常糟糕的主意:

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

假设您将包含此代码的 .java 文件发送给将其另存为 ASCII 的人,那么您的源代码将更改为:

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

当我将文档存储到源代码控制系统时,我也看到过这种情况发生。

底线:在使用硬编码字符串编写源代码时,切勿使用特殊编码。使用正确的编码将字符串存储在文件中以写入和读取字符串,或者如果您坚持在源代码中使用硬编码数据,则使用 unicode 表示法。

即使您正确存储了包含该字符串的文件,在编译代码时也必须非常小心。如果编译器使用不同的编码,s也会被损坏。

将 HTML 转换为 PDF 时,您还必须确保正确读取数据。我假设您正在使用 XML Worker(而不是过时的 HTMLWorker 类)。您可以在不同的地方指示要使用的编码。

最后,您必须确保使用支持西里尔字符的字体。例如:如果您使用默认字体 Helvetica,则不会呈现任何内容。

您还可以在免费电子书 The Best iText Questions on StackOverflow 中找到此信息.

关于java - getBytes() 不适用于西里尔字母,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27685144/

相关文章:

java - Maven2 编译我的测试,但不运行它们

java.io.IOException - IO 流读取结束

java - java 中的preparedStatement 上的HP Fortify SQL 注入(inject)问题

php - 使用 tcpdf 编写更快的 pdf

Haskell IO 俄语符号

Python - 处理 Unicode(俄语)Txt 文件

java - Android Studio FloatingActionButton 错误

pdf-generation - wkhtmltopdf命令失败

node.js - express.js - 创建一个新的 pdf 并强制下载,而不将其保存在服务器上

android - Retrofit 2.1 发布 Cyrillic 字段错误