你能帮我解释HTML格式的希腊字符HTML =& amp; #8062;和十六进制值01F7E
可在以下网址
找到这些字符的详细信息http://www.isthisthingon.org/unicode/index.php?page=01&subpage=F&hilite=01F7E
当我在Apache FOP中运行此角色时,它们会给我一个Bounds Exception的ArrayIndexOut
引起:java.lang.ArrayIndexOutOfBoundsException:-1 在org.apache.fop.text.linebreak.LineBreakUtils.getLineBreakPairProperty(LineBreakUtils.java:668) 在org.apache.fop.text.linebreak.LineBreakStatus.nextChar(LineBreakStatus.java:117)
当我查看FOP代码时,我无法理解LineBreakUtils.java中对lineBreakProperties [] []数组的需要。
我还注意到上面提到的所有希腊字符的FOP都失败了,这些字符是不可显示的,但是有类似的错误。
这些特殊字符是什么?
为什么这些字符的无显示是这些换行符还是TAB的?
有没有人用FOP解决过类似的问题?
答案 0 :(得分:0)
U + 1F7E代码点是希腊语扩展Unicode块的一部分。但它并不代表任何实际的性格;它是一个保留但未分配的代码点。以下是Unicode 6.0的图表:http://www.unicode.org/charts/PDF/U1F00.pdf。
所以你得到的错误可能并不那么令人惊讶。
答案 1 :(得分:0)
我通过FOP 0.95和FOP 1.0运行了一个包含以下<fo:block>
的FO文件:
<fo:block>Unassigned code point: ὾</fo:block>
我确实得到了你所看到的java.lang.ArrayIndexOutOfBoundsException。
使用相邻的“真实”字符时,没有错误:
<fo:block>Assigned code point: ώ</fo:block>
所以看起来你必须确保你的数据流不包含像U + 1F7E这样的非字符。
答案 2 :(得分:0)
来自Apache的回答
乍一看,这似乎是FOP中Unicode断行实现的一个小小疏忽。这没有考虑给定代码点在换行上下文中没有分配“类”的可能性。 (= U + 1F7E未出现在文件中 http://www.unicode.org/Public/UNIDATA/LineBreak.txt,用作在LineBreakUtils.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? case LineBreakUtils.LINE_BREAK_PROPERTY_AI: case LineBreakUtils.LINE_BREAK_PROPERTY_SG: case LineBreakUtils.LINE_BREAK_PROPERTY_XX:
这样做是将类“AL”或“字母”分配给尚未通过Unicode分配类的任何代码点。这意味着它将被视为常规信件。 现在,我问你是否确定你知道你在做什么的问题是,这可能会变得不可取。也许这个角色需要被视为一个空间而不是一个字母。 除了作为“保留”字符之外,Unicode没有定义U + 1F7E,因此Unicode无法说明在换行符的情况下该字符应该发生什么......
那就是说,在这种情况下FOP崩溃也是错误的,所以这个bug肯定是真的。