1

您能帮我将带有 HTML 显示的希腊字符解释为 HTML= & #8062; 和十六进制值 01F7E

这些字符的详细信息可以在以下 URL 中找到

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

当我在 Apache FOP 中运行这个角色时,他们给了我一个 ArrayIndexOut of Bounds 异常

引起: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 都失败了,这些字符因类似的错误而无法显示。

这些特殊字符是什么?
为什么这些字符没有显示这些换行符或制表符?
有没有人用 FOP 解决过类似的问题?

4

3 回答 3

0

U+1F7E 代码点是希腊扩展 Unicode 块的一部分。但它并不代表任何实际字符;它是一个保留但未分配的代码点。这是来自 Unicode 6.0 的图表:http ://www.unicode.org/charts/PDF/U1F00.pdf 。

所以你得到的错误可能并不那么令人惊讶。

于 2010-12-23T18:20:52.637 回答
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

来自阿帕奇的回答

乍一看,这似乎是在 FOP 中实现 Unicode 换行的一个小疏忽。这没有考虑给定代码点在换行上下文中未分配“类”的可能性。(= U+1F7E 没有出现在文件 http://www.unicode.org/Public/UNIDATA/LineBreak.txt中,该文件用作在 LineBreakUtils.java 中生成这些数组的基础)

另一方面,显然可以提出一个问题,为什么您如此迫切地需要在输出中具有未分配的代码点。你确定你需要这个吗?如果是,那么您能否详细说明具体原因?(即这个未分配的代码点到底是用来做什么的?)

最直接的“修复”似乎大致如下:

索引: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) {

+ case 0: // 未分配的代码点:考虑为 AL?案例 LineBreakUtils.LINE_BREAK_PROPERTY_AI:案例 LineBreakUtils.LINE_BREAK_PROPERTY_SG:案例 LineBreakUtils.LINE_BREAK_PROPERTY_XX:

这样做的目的是将类“AL”或“Alphabetic”分配给尚未由 Unicode 分配类的任何代码点。这意味着它将被视为普通信件。现在,我之所以问你是否确定自己知道自己在做什么,是因为这可能会被证明是不可取的。也许有问题的字符需要被视为一个空格而不是一个字母。Unicode 没有将 U+1F7E 定义为“保留”字符,因此 Unicode 无法说明在换行的上下文中该字符应该发生什么是有道理的......

也就是说,这种情况下 FOP 崩溃也是错误的,所以这个 bug 肯定是真的。

于 2011-01-07T09:37:16.573 回答