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}", "?")
代码,它在服务器端工作,但不在客户端工作。
答案 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
并非来自用户输入。