3 回答
TA贡献1866条经验 获得超5个赞
我发现了问题。我们正在使用 org.apache.commons.lang3.StringEscapeUtils.unescapeHtml4 将字符串中的 HTML 实体转换为它们的非编码形式。这似乎破坏了一些非拉丁字符。例如,通过此方法传递字符串“Italien 🇮🇹”会将其转换为“Italien 🇮?” (最后一个字符被破坏)
通过此方法传递“🍍🥔🍵🍵🏺🎧🎚🎙⚔⌨🎳⛳🏓🌏🏝🏝🕘🕒🕢🕠🎵🔇🎸🗓🔏⛏🔒”将其转换为“🍍??🥔?🍵??🏺?🎧?🎚?🎚? ?🎙?⚔⌨🎳?⛳🏓?🌏?🏝?”
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);
}
}
🍍🥔🍵🍵🏺🎧🎚🎙⚔⌨🎳⛳🏓🌏🏝🏝🕘🕒🕢🕠🎵🔇🎸🗓🔏⛏🔒->🍍?🥔?🍵?🍵?🏺?🎧?🎚?🎙?⚔⌨🎳?⛳🏓?🌏?🏝?
现在找到一个替代的 HTML 实体解码器......
TA贡献1735条经验 获得超5个赞
Is there a proper way to convert these characters into UTF8
可能,如果您只是发送字符串,它将被转换为 UTF-8。这就是 Java 编码器的工作方式。
如果没有并且您正在发送二进制文件,则可以直接转换:
private static byte[] removeSurrogates(String query) { return query.getBytes( "UTF-8" ); }
TA贡献1856条经验 获得超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 做这件事很简单:
插入新数据也不是问题:
很抱歉,我不知道如何使用 Java 来解决这个问题,但我希望看到 BigQuery 的 API 能够优雅地处理表情符号的证明会有所帮助。
添加回答
举报