4

UbuntuでPDFTKでphpを使用しています。PDF にデータを入力すると、この文字にアクセント付きの奇妙な文字が表示されます: á í . 私はUTF-8エンコーディングを使用しています: 1 - TRUEを出力する echo mb_check_encoding ($var, 'UTF-8') でチェックしました。私に何ができるか考えていますか?

また、utf8_decode で ISO に変換しようとしましたが、それでもうまくいきません。

ありがとう

4

2 に答える 2

9

そうです、utf8_decode() は、Windows-1252 (つまり、U+0000–U+00FF) としてエンコードできる文字に対して機能します。

ただし、Windows-1252 でエンコードできない文字には使用できません。

ただし、UTF-16BE を使用していつでも文字をエンコードできます。これは、単一のフィールドに対してのみ行うことができます。たとえば、「özil」という単語をエンコードするには、次のようにします。

<<
/V (þÿ^@ö^@z^@i^@l)
/T (name)
>>

(ここで、"^@" は NUL 文字 (U+0000) を示します。これは、ファイルが Windows-1252 (latin1) でエンコードされている場合、私のエディター (vim) でどのように見えるかです。)

バイト オーダー マーク (ファイルが Windows-1252 でエンコードされている場合は "þÿ" と表示されます) を使用する必要があり、文字列全体 (2 つの括弧の間) を UTF-16 でエンコードする必要があることに注意してください。

PHP スクリプトで FDF を生成している場合は、次のようにすることができます。

<<
/V (<?php echo chr(0xfe) . chr(0xff) . str_replace(array('\\', '(', ')'), array('\\\\', '\(', '\)'), mb_convert_encoding("özil", 'UTF-16BE')); ?>)
/T (name)
>>

次のように 16 進コードを書き出すこともできます (つまり、括弧ではなく角括弧で囲みます)。

<<
/V <FEFF00F6007A0069006C>
/T (name)
>>

これはまったく同じ結果になります (文字列 "özil")。文字に関しては効率が悪いですが、実際にはpdftkの方が信頼性が高いようです.pdftkにはいくつかのバグが見つかりました(バージョン2.02)。

最後に、任意の文字の Unicode コード ポイントを 8 進表記 (\ddd) で書き出すこともできます。たとえば、ö のコードポイントは U+00F6 で、8 進数では 366 であるため、次のように記述できます。

<<
/V (\366zil)
/T (name)
>>

ただし、これは U+00FF (8 進 377) までしか機能しません。それを超えると、UTF-16 を使用する必要があります。

PDF 標準では、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 はそれを無視しているようです。

于 2013-10-03T22:20:37.317 に答える
3

utf8_decodeで解決しました。キャッシュに問題があり、文字がまだ表示されていたと思います

于 2011-05-27T11:56:45.953 に答える