本文介紹了如果沒有不成對(duì)的代理字符,我如何將表情符號(hào)等字符編碼為UTF8?的處理方法,對(duì)大家解決問題具有一定的參考價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧!
問題描述
我有包含各種字符的字符串,需要寫入Google BigQuery,它需要嚴(yán)格的UTF8字符串。在嘗試使用各種表情符號(hào)輸入編寫字符串時(shí),我收到錯(cuò)誤:
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)
...
我有一個(gè)解決此問題的方法,只需從字符串中刪除所有代理項(xiàng)字符:
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();
}
但是,這會(huì)產(chǎn)生一個(gè)類似
的字符串