2014-12-29 25 views
0

我找到了一些答案,但它們都不適用於我。我想從一個html製作一個pdf文件,但問題是我的html有Cyrilic字母,我發現這個簡單的代碼有些事情需要處理:getBytes()不適用於西里爾文字母

String s =「ЗдравоKris」;

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

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

//我試圖用新的字符串(字節,「UTF-8」),但沒有奏效

然後,我的價值傳遞給我的PDF生成器功能,但它僅輸出部分從字符串s不在Cyrilic,即Kris

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

試試這個'byte [] bytes = s.getBytes(「ISO-8859-1」);' – Abhishek

+0

你試過'String s'嗎? 'htp.CreatePDF( 「 kristijan

」+ S +「

」, 「克里斯」);''也看起來CreatePDF'如C#不是Java。 –

+0

我注意到我放錯了方括號但不再工作 – Chris

回答

0

一種方法來解決無法(?)createPDF的處理中爪哇(!)字符的完整的Unicode範圍是調查

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

字符大於0x80。這些必須由相應的數字HTML實體替換。

您可以通過將String設置爲這些實體並查看嵌入此字符串後會發生什麼情況,從而輕鬆驗證此情況。

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中找到此信息。