【问题标题】:How to get a character type in GWT client side?如何在 GWT 客户端获取字符类型?
【发布时间】:2017-10-08 18:03:53
【问题描述】:

com.google.gwt.json.client.JSONParser.parseStrict(jsonStr) 在 json 字符串包含不可打印/可识别的 Unicode 字符时引发语法错误。因此,我试图在客户端删除不可打印的 Unicode 字符。在How can I replace non-printable Unicode characters in Java?之后,我正在尝试在客户端实现此代码,但是Character.getType(codePoint)与客户端不兼容。

有什么办法可以解决这个问题吗?还有其他方法可以在客户端获取字符类型吗?关于如何解决主要问题的任何其他建议?

非常感谢! 大卫。

顺便说一句,我尝试使用my_string.replaceAll("\\p{C}", "?") 代码,它在服务器端有效,但在客户端无效。

【问题讨论】:

    标签: java json gwt unicode character


    【解决方案1】:

    我已将 com.google.gwt.json.client.JSONParser.parseStrict(jsonStr) 的使用更改为 com.google.gwt.json.client.JSONParser.parseLenient(jsonStr),解析器能够像在服务器端一样处理那些不可打印/可识别的 Unicode 字符。

    我觉得使用JSONParser.parseLenient 很舒服,因为jsonStr 不是来自用户输入。

    【讨论】:

      【解决方案2】:

      com.google.common.base.CharMatcher 在 Guava 中看起来很有希望。我没有测试过这个,但是这个类被注释了@GwtCompatible

      Guava 文档的StringsExplained 文章中有使用指南。

      【讨论】:

      • 我不认为这段代码是客户投诉。我的问题是在 GWT 客户端中删除这些字符。
      • 令人惊讶的是,当 Guava 类使用 @GwtCompatible 注释时,这应该意味着它们是模拟的。你试过了吗,发现它不起作用?
      【解决方案3】:

      您可以添加一个原生 JS 方法并在其中使用正则表达式来替换每个不可打印的非 ASCII 字符,如下所示:

      private native String replaceUnprintableChars(String text, String replacement) /*-{
          return text.replace(/[^\u0020-\u007E]/g, replacement);
      }-*/;
      
      
      // Somewhere else....
      String replacedText = replaceUnprintableChars(originalString, "?");
      

      显示的正则表达式将用replacement 字符串(例如"?")替换每个不可打印或非ASCII 字符。如果您想包含非 ASCII 可打印字符(例如拉丁语),则可以调整表达式以扩大范围。

      当然,您也可以使用 Java 正则表达式来做到这一点:

      text.replaceAll("[^\\u0020-\\u007E]", "?");
      

      但是我先想出了JS的方案,不知道为什么!

      【讨论】:

      • 我尝试了几种特定字符省略的变体,但在客户端和服务器端都没有帮助。
      猜你喜欢
      • 1970-01-01
      • 2011-09-10
      • 2019-05-18
      • 2021-09-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多