我在Ubuntu上使用php與PDFTK。當用數據填充PDF時,我會得到帶有重音的這些字母的怪異字符:áóí。我正在使用UTF-8編碼:我使用echo mb_check_encoding($ var,'UTF-8')進行了檢查,其輸出結果爲 - TRUE。任何想法我可以做什麼?使用PDFTk填充PDF時奇怪的字符
我也試着用utf8_decode轉換到ISO,但仍然沒有運氣。
謝謝
我在Ubuntu上使用php與PDFTK。當用數據填充PDF時,我會得到帶有重音的這些字母的怪異字符:áóí。我正在使用UTF-8編碼:我使用echo mb_check_encoding($ var,'UTF-8')進行了檢查,其輸出結果爲 - TRUE。任何想法我可以做什麼?使用PDFTk填充PDF時奇怪的字符
我也試着用utf8_decode轉換到ISO,但仍然沒有運氣。
謝謝
你是對的,utf8_decode()將適用於可以編碼爲Windows-1252(即U + 0000-U + 00FF)的字符。
但是它不適用於無法在Windows-1252中編碼的字符。
雖然你可以使用UTF-16BE來編碼字符。您只能爲單個字段執行此操作,例如編碼詞「厄齊爾」:
<<
/V (þÿ^@ö^@z^@i^@l)
/T (name)
>>
(這裏的「^ @」表示NULL字符(U + 0000),這是它的外觀在我的編輯器(VIM),如果該文件是在編碼。 Windows-1252(latin1)。)
請注意,您需要使用字節順序標記(如果您的文件在Windows-1252中編碼,將顯示爲「þÿ」),並且您需要編碼整個字符串(在兩個括號之間)以UTF-16編碼。
如果你在一個PHP腳本生成的FDF,你可以做這樣的事情:
<<
/V (<?php echo chr(0xfe) . chr(0xff) . str_replace(array('\\', '(', ')'), array('\\\\', '\(', '\)'), mb_convert_encoding("özil", 'UTF-16BE')); ?>)
/T (name)
>>
你也可以寫出這樣的十六進制代碼(即包含在尖括號而非括號中):
<<
/V <FEFF00F6007A0069006C>
/T (name)
>>
這與結果完全相同(字符串「özil」)。它在字符方面效率較低,但在pdftk中它似乎更可靠,這在我發現的一些錯誤中(2.02版本)。
最後,您還可以爲八進制記號(\ ddd)中的任何字符寫出Unicode代碼點。例如,O具有代碼點U + 00F6,這在八進制是366,所以你可以寫:
<<
/V (\366zil)
/T (name)
>>
然而,這僅僅工作到U + 00FF(八進制377)。除此之外,你必須使用UTF-16。
PDF standard允許您爲整個FDF文檔設置編碼爲UTF-8。我想這並沒有與PDFTK工作,但是在理論上它會做這樣的:
%FDF-1.2
1 0 obj
<<
/Version /1.3
/Encoding /utf_8
/FDF
(你大概會必須將FDF版本設置爲1.3(或頭以上)也是如此,根據標準。)
你也可以做到這一點在外地一級:
<<
/V (özil)
/T (name)
/Encoding /utf_8
>>
但正如我所說的,我沒能得到任何的這個工作。 pdftk似乎忽略了它。
關於文本字符串,請參閱pdf參考1.7頁157。那麼你會知道UTF-8可能是錯誤的。 – juFo 2017-09-26 12:07:30