第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何在沒有未配對代理字符的情況下將表情符號等字符編碼為 UTF8?

如何在沒有未配對代理字符的情況下將表情符號等字符編碼為 UTF8?

慕容3067478 2022-10-07 17:43:09
我有需要寫入 Google BigQuery 的各種字符的字符串,這需要嚴(yán)格的 UTF8 字符串。嘗試使用各種表情符號輸入編寫字符串時,出現(xiàn)錯誤: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();    }但是,這會導(dǎo)致類似的字符串??????????????????????????????????????????????????減少到只有四個表情符號????有沒有正確的方法將這些字符轉(zhuǎn)換為 UTF8 而不會丟失,并且不使用不成對的代理?(抱歉,我對一般字符集的理解不是很好)
查看完整描述

3 回答

?
心有法竹

TA貢獻(xiàn)1866條經(jīng)驗 獲得超5個贊

我發(fā)現(xiàn)了問題。我們正在使用 org.apache.commons.lang3.StringEscapeUtils.unescapeHtml4 將字符串中的 HTML 實體轉(zhuǎn)換為它們的非編碼形式。這似乎破壞了一些非拉丁字符。例如,通過此方法傳遞字符串“Italien ????”會將其轉(zhuǎn)換為“Italien ???” (最后一個字符被破壞)

通過此方法傳遞“??????????????????????????????????????????????????”將其轉(zhuǎn)換為“??????????????????????? ???????????????????”

import org.apache.commons.lang3.StringEscapeUtils;


public class CharacterTest {

    public static void main(String[] args) {

        String good = "??????????????????????????????????????????????????";

        String bad = StringEscapeUtils.unescapeHtml4(good);

        System.out.println(good + "->" + bad);

    }

}


??????????????????????????????????????????????????->???????????????????????????????????????

現(xiàn)在找到一個替代的 HTML 實體解碼器......


查看完整回答
反對 回復(fù) 2022-10-07
?
喵喔喔

TA貢獻(xiàn)1735條經(jīng)驗 獲得超5個贊

Is there a proper way to convert these characters into UTF8 可能,如果您只是發(fā)送字符串,它將被轉(zhuǎn)換為 UTF-8。這就是 Java 編碼器的工作方式。

如果沒有并且您正在發(fā)送二進制文件,則可以直接轉(zhuǎn)換:

private static byte[] removeSurrogates(String query) {
    return query.getBytes( "UTF-8" );
    }


查看完整回答
反對 回復(fù) 2022-10-07
?
RISEBY

TA貢獻(xiàn)1856條經(jīng)驗 獲得超5個贊

讓我暫時離開 Java 來說明 BigQuery 可以處理表情符號:


CREATE TABLE `public_dump.emoji_test`

AS

SELECT "??????????????????????????????????????????????????" emojis

然后測試是否存在:


SELECT COUNT(*)

FROM `fh-bigquery.public_dump.emoji_test`

WHERE emojis LIKE '%??%'


1

用 Python 做這件事很簡單:

http://img1.sycdn.imooc.com//633ff4f300016fed05220135.jpg

插入新數(shù)據(jù)也不是問題:

http://img1.sycdn.imooc.com//633ff4ff0001a7b005860234.jpg

很抱歉,我不知道如何使用 Java 來解決這個問題,但我希望看到 BigQuery 的 API 能夠優(yōu)雅地處理表情符號的證明會有所幫助。



查看完整回答
反對 回復(fù) 2022-10-07
  • 3 回答
  • 0 關(guān)注
  • 107 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號