【问题标题】:Issues with non-printable characters不可打印字符的问题
【发布时间】:2010-12-23 20:22:22
【问题描述】:

我正在使用条形码扫描仪将二维数据矩阵、UID 条形码读取到 Web 应用程序中。 UID 包含不可打印的 ASCII 字符 RS、GS 和 EOT。我的问题是浏览器会自动将 HTML 代码附加到每个 ASCII 字符的前面,并且由于没有为 RS、GS 和 EOT 定义 HTML 代码,所以它很适合。

我正在使用 Javascript 从扫描的数据中动态构建一个字符串,这是我返回的示例

091[041)062>030RS

如您所见,RS 字符被赋予了一个不作为标准 HTML 代码存在的值 (030)。另一个问题似乎是,当击中常规字母字符时,浏览器似乎将其视为回车符(CR),因此它们之前的值会短暂显示然后消失。

我希望能够在浏览器文本框中显示整个字符串。我有一个 javascript 函数来查找这些不可打印的字符并将它们交换为字母,即 RS 将被替换为“R”和“S”的串联。但是如上所述,我仍然遇到浏览器发疯的问题。任何见解都值得赞赏。

更新:

嗨,Mathew,很抱歉没有提供更详细的信息。我用全部替换标志尝试了如下替换功能:

String.replace(/(030)|(029)|(004)/g,"");

问题是它替换了整个字符串,所以

091[041)062>030RS

变成

/(030)|(029)|(004)/g

【问题讨论】:

    标签: javascript html dom ascii


    【解决方案1】:

    我不确定我是否完全理解您的问题,但为什么不在将字符串写入 DOM 之前对字符串运行替换函数呢?如果非打印字符从不打印,则不会有任何问题。


    对更新的响应

    您可以使用正则表达式将不可打印的字符与十六进制值匹配。查看this 了解详情。这是一个简单的例子:

    uid.replace(/[\x30\x29\x04]/g,"")
    

    (请注意,replace() 函数是在字符串实例上调用的,而不是在 String 本身上。)

    为了更有效,请考虑使用一系列不可打印的字符(即[\x00-\x1F\x80-\xFF])。

    【讨论】:

    • 您可以将标准 % 格式中的特殊字符编码,例如,RS%1E
    • @Loadmaster - 它究竟是如何工作的?我对此并不熟悉。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多