如何在GWT客户端获取字符类型?

时间:2017-05-10 07:54:16

标签: java json gwt unicode character

当json字符串包含不可打印/识别的Unicode字符时,

com.google.gwt.json.client.JSONParser.parseStrict(jsonStr)会抛出语法错误。因此,我试图在客户端删除不可打印的Unicode字符。在How can I replace non-printable Unicode characters in Java?之后,我尝试在客户端实施此代码,但Character.getType(codePoint)不与客户端兼容。

有没有办法克服这个问题?在客户端获取字符类型的任何其他方法?关于如何解决主要问题的任何其他建议?

非常感谢! 大卫。

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

2 个答案:

答案 0 :(得分:0)

您可以添加本机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解决方案,不知道为什么!

答案 1 :(得分:0)

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

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