【问题标题】:ANTLRWorks 1.4.3 can't display & mutilates ASCII charactersANTLRWorks 1.4.3 无法显示和破坏 ASCII 字符
【发布时间】:2011-12-07 20:18:22
【问题描述】:

作为我上一个问题 (ANTLRWorks 1.4.3 can't properly read extended-ASCII characters) 的新进展,我使用十六进制编辑器创建了一个简单的文本文件:

' ' '£' '°' 'ç'

或十六进制:

27 A0 27 20 27 A3 27 20 27 B0 27 20 27 E7 27

生成的文件在 Notepad++ 中可以正常读取。在 ANTLRWorks 1.4.3 中打开时,(扩展的)ASCII 字符显示为方框。在行尾添加和删除空格后保存文件后,十六进制文件视图如下所示:

27 3F 20 27 A3 27 20 27 B0 27 20 27 3F

由于某种原因,撇号之间的初始空格 (20) 被分割成问号 (3F),带有变音字符 (E7) 的特殊 c 和紧随其后的撇号都被问号替换。

似乎扩展 ASCII 字符的存在以某种方式导致了可怕的错误。这里的任何人都可以复制此问题和/或提供可能的原因和解决方案吗?

提前致谢。

【问题讨论】:

    标签: ascii antlrworks asciiencoding


    【解决方案1】:

    您可以只使用 Unicode 转义符。假设你想匹配英文磅符号,你会这样做:

    PoundSign : '\u00A3';
    

    代替:

    PoundSign : '£';
    

    它们(应该)都匹配同一个字符,并且第一个字符很可能不会被破坏。

    【讨论】:

    • 我想这行得通...它至少不会以这种方式破坏任何东西,但是当似乎没有理由必须这样做时,不得不使用这种方法是相当烦人的这个 :(
    • @MayaPosch,是的,我同意,这很麻烦,但我想要么就是这样,要么根本不使用 ANTLRWorks。提出一个错误(很可能是)不会有多大好处,我认为自从即将发布的 ANTLR(第 4 版)以来,ANTLRWorks 将被完全重写并与 ANTLR 集成。
    • 啊,我明白了。知道那个版本什么时候出吗? :)
    • @MayaPosch,我在阅读的 ANTLR 邮件列表中没有看到日期。我希望在 v4 正式发布之前发布一个 beta 版本(换句话说:我猜这可能需要一段时间,至少不会在几个月内)。
    • 好吧,那就是 Unicode 代码点。感谢您提供此替代方案:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-17
    • 2011-01-12
    • 1970-01-01
    相关资源
    最近更新 更多