我有需要写入 Google BigQuery 的各种字符的字符串,这需要严格的 UTF8 字符串。尝试使用各种表情符号输入编写字符串时,出现错误:
java.lang.IllegalArgumentException: Unpaired surrogate at index 3373
at org.apache.beam.sdk.repackaged.com.google.common.base.Utf8.encodedLengthGeneral(Utf8.java:93)
at org.apache.beam.sdk.repackaged.com.google.common.base.Utf8.encodedLength(Utf8.java:67)
at org.apache.beam.sdk.coders.StringUtf8Coder.getEncodedElementByteSize(StringUtf8Coder.java:145)
...
我有一个解决这个问题的方法,只需从字符串中删除所有代理字符:
private static String removeSurrogates(String query) {
StringBuilder sb = new StringBuilder();
for (int i = 0; i < query.length(); i++) {
char c = query.charAt(i);
if (!(Character.isHighSurrogate(c) || Character.isLowSurrogate(c))) {
sb.append(c);
}
}
return sb.toString();
}
但是,这会导致类似的字符串
🍍🥔🍵🍵🏺🎧🎚🎙⚔⌨🎳⛳🏓🌏🏝🏝🕘🕒🕢🕠🎵🔇🎸🗓🔏⛏🔒
减少到只有四个表情符号
⚔⌨⛳⛏
有没有正确的方法将这些字符转换为 UTF8 而不会丢失,并且不使用不成对的代理?
(抱歉,我对一般字符集的理解不是很好)
心有法竹
喵喔喔
RISEBY
相关分类