1

HTML 表示のギリシャ文字を HTML= & #8062; として解釈するのを手伝ってくれませんか。および 16 進値 01F7E

これらのキャラクターの詳細は、以下の URL で確認できます。

http://www.isthisthingon.org/unicode/index.php?page=01&subpage=F&hilite=01F7E

この文字を Apache FOP で実行すると、ArrayIndexOut of Bounds Exception が発生します。

原因: java.lang.ArrayIndexOutOfBoundsException: -1 at org.apache.fop.text.linebreak.LineBreakUtils.getLineBreakPairProperty(LineBreakUtils.java:668) at org.apache.fop.text.linebreak.LineBreakStatus.nextChar(LineBreakStatus.java) :117)

FOP コードを調べたところ、LineBreakUtils.java に lineBreakProperties[][] 配列が必要であることがわかりませんでした。

また、上記のページで言及されているすべてのギリシャ文字で FOP が失敗し、同様のエラーで表示できないことにも気付きました。

これらの特殊文字は何ですか?
これらの文字の表示がないのはなぜこれらの改行または TAB ですか?
FOP で同様の問題を解決した人はいますか?

4

3 に答える 3

0

Apacheからの回答

一見すると、これはFOPでのUnicode改行の実装における小さな見落としのように見えます。これは、特定のコードポイントが改行コンテキストで「クラス」に割り当てられていない可能性を考慮していません。(= U + 1F7Eは、LineBreakUtils.javaでこれらの配列を生成するための基礎として使用されるファイルhttp://www.unicode.org/Public/UNIDATA/LineBreak.txtには表示されません )

一方、出力に割り当てられていないコードポイントがどうしても必要なのかという疑問が明らかになる可能性があります。これが必要だと絶対に確信していますか?はいの場合、正確な理由を詳しく説明できますか?(つまり、この割り当てられていないコードポイントは正確には何に使用されますか?)

最も簡単な「修正」は、おおよそ次のように思われます。

インデックス:src / java / org / apache / fop / text / linebreak / LineBreakStatus.java

--- src / java / org / apache / fop / text / linebreak / LineBreakStatus.java(リビジョン1054383)+++ src / java / org / apache / fop / text / linebreak / LineBreakStatus.java(作業コピー)@@ -87,6 +87,7 @@

     /* Initial conversions */
     switch (currentClass) {

+ケース0://割り当てられていないコードポイント:ALと見なしますか?ケースLineBreakUtils.LINE_BREAK_PROPERTY_AI:ケースLineBreakUtils.LINE_BREAK_PROPERTY_SG:ケースLineBreakUtils.LINE_BREAK_PROPERTY_XX:

これは、Unicodeによってクラスが割り当てられていないコードポイントにクラス「AL」または「Alphabetic」を割り当てることです。これは、通常の文字として扱われることを意味します。さて、私があなたが何をしているのかをあなたが知っていると確信しているかどうかという質問をしている理由は、これが望ましくないことが判明するかもしれないからです。おそらく、問題の文字は文字ではなくスペースとして扱う必要があります。Unicodeは「予約済み」文字以外のU+1F7Eを定義しないため、Unicodeが改行のコンテキストでこの文字で何が起こるべきかを言うことができないことは理にかなっています...

とはいえ、この場合にクラッシュするのもFOPの間違いなので、バグは間違いなく本物です。

于 2011-01-07T09:37:16.573 に答える
0

<fo:block>FOP 0.95 と FOP 1.0 の両方で、以下を含む FO ファイルを実行しました。

<fo:block>Unassigned code point: &#x1F7E;</fo:block>

あなたが見ているのと同じ java.lang.ArrayIndexOutOfBoundsException を取得しました。

隣接する「実際の」文字を使用すると、エラーは発生しませんでした:

<fo:block>Assigned code point: &#x1F7D;</fo:block>

したがって、データストリームに U+1F7E のような非文字が含まれていないことを確認する必要があるようです。

于 2011-01-01T18:47:04.517 に答える
0

U+1F7E コード ポイントは、ギリシャ拡張 Unicode ブロックの一部です。しかし、それは実際のキャラクターを表すものではありません。これは予約済みですが割り当てられていないコード ポイントです。これは Unicode 6.0 のチャートです: http://www.unicode.org/charts/PDF/U1F00.pdf

したがって、発生するエラーはおそらくそれほど驚くべきことではありません。

于 2010-12-23T18:20:52.637 に答える