2 回答

TA貢獻1998條經驗 獲得超6個贊
事實上,MySQLutf8在當時是正確的,因為 UTF-8 多字節序列最多只有 3 個字節。但是 Unicode 有更多的符號,UTF-8 也增長了。并且只能 utf8mb4做到。
但是最多 3 個字節都可以:
return input
.codePoints()
.filter(codePoint -> codePoint >= 256) // Optional heuristic optimisation
.mapToObj(codePoint -> new String(Character.toChars(codePoint)))
.filter(cpString -> cpString.getBytes(StandardCharsets.UTF_8).length > 3)
.collect(Collectors.toSet())
或者只是U+FFFF 以上的所有代碼點:
return input
.codePoints()
.filter(codePoint -> codePoint >= 0x1_0000)
.mapToObj(codePoint -> new String(Character.toChars(codePoint)))
.collect(Collectors.toSet());
老實說,我需要研究是否Character.charCount(codePoint)也可以使用,因為它檢查 UTF-16 中的代理項對,而不是 UTF-8 中的字節數。
有用的可能是Character.getName(codePoint)將代碼點替換為(如果字段有足夠長的大小)。

TA貢獻1900條經驗 獲得超5個贊
如果 Java 中有一種方法可以生成 -encoded 字符串的十六進制表示,則在字符串中UTF-8
搜索一個字節。F0
如果 Java 中有一種方法可以生成編碼字符串的 16 位表示UTF-16
,則搜索包含D8xx-DFFF
值的任何 16 位。
(指出一些這樣的方法,也許我可以詳細說明。)
添加回答
舉報