我找到了一些答案,但它们都不适合我。我想从html制作一个pdf文件,但问题是我的html有Cyrilic字母,我发现这与这个简单的代码有关:
String s =“ЗдравоKris”;
byte bytes [] = s.getBytes(“UTF-8”);
String value = new String(bytes,“ISO-8859-1”);
//我尝试使用新的String(字节,“UTF-8”),但它不起作用
然后我将值传递给我的pdf生成器函数,但它只输出字符串s
中不在Cyrilic中的部分,即Kris
htp.CreatePDF("<html><head><title>kristijan</title></head><body><h1>" + value + "</h1></body></html>", "kris");
答案 0 :(得分:2)
请查看我对此问题的回答: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中找到此信息。
答案 1 :(得分:0)
解决createPDF的无能(?)以处理Java(!)中的完整unicode字符范围的一种方法是调查
String s = "Здраво Kris";
表示大于0x80的字符。这些必须由相应的数字HTML实体替换。
您可以通过将String s设置为这些实体来轻松验证这一点,并了解嵌入此字符串会发生什么。