我有一个程序正在从twitter流api实时解析推文.在存储它们之前,我将它们编码为utf8.某些字符最终出现在字符串中?,??或??? 而不是他们各自的unicode代码并导致问题.经过进一步调查,我发现有问题的字符来自"表情符号"块,U + 1F600 - U + 1F64F,以及"其他符号和象形文字"块,U + 1F300 - U + 1F5FF.我尝试删除,但是不成功,因为匹配器最终替换了字符串中的几乎每个字符,而不仅仅是我想要的unicode范围.
String utf8tweet = "";
try {
byte[] utf8Bytes = status.getText().getBytes("UTF-8");
utf8tweet = new String(utf8Bytes, "UTF-8");
}
catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
Pattern unicodeOutliers = Pattern.compile("[\\u1f300-\\u1f64f]", Pattern.UNICODE_CASE | Pattern.CANON_EQ | Pattern.CASE_INSENSITIVE);
Matcher unicodeOutlierMatcher = unicodeOutliers.matcher(utf8tweet);
utf8tweet = unicodeOutlierMatcher.replaceAll(" ");
Run Code Online (Sandbox Code Playgroud)
我该怎么做才能删除这些字符?
我想检查一封信是否是表情符号.我发现了一些类似的问题并发现了这个正则表达式:
private final String emo_regex = "([\\u20a0-\\u32ff\\ud83c\\udc00-\\ud83d\\udeff\\udbb9\\udce5-\\udbb9\\udcee])";
Run Code Online (Sandbox Code Playgroud)
但是,当我在以下句子中执行以下操作时:
for (int k=0; k<letters.length;k++) {
if (letters[k].matches(emo_regex)) {
emoticon.add(letters[k]);
}
}
Run Code Online (Sandbox Code Playgroud)
它不会添加任何表情符号的任何字母.我也试过用a Matcher和a Pattern,但那也没用.正则表达式有什么问题,或者我在代码中遗漏了哪些东西?
这就是我收到这封信的方式:
sentence = "Jij staat op 10 "
String[] letters = sentence.split("");
Run Code Online (Sandbox Code Playgroud)
应该识别并添加最后一个 emoticon