如何在 groovy 中将 utf-8mb4 更改为 UTF-8?
How to change utf-8mb4 to UTF-8 in groovy?
目前,我在接收来自用户手机的字符串输入时遇到问题。
输入的字符串包含 utf8mb4 字符(笑脸、表情符号等)。
这导致我的后端出错 (mysql),因为它只接受 utf-8 输入。
现在,我怎样才能将所有 utf-8mb4 输入替换为 utf-8?
def utf8mb4string = '';
// parse the utf8mb4string to utf8
// logic here
//possible utf8 result maybe: '�������'
我在这里也发现了类似的问题How would I convert UTF-8mb4 to UTF-8?
但还没有明确的答案,尤其是在 Groovy.
中的实施
您 can't store characters(如 "man with turban")来自基本多语言平面 (BMP) 之外,使用 MySQL 命名不当的 "utf8" 编码。您需要改为指定 "utf8mb4"。
如果您不想存储这些字符,并且想要替换或丢弃它们,则必须遍历字符串,并构建一个新字符串(在 Java 中):
IntStream converted = utf8mb4string.codePoints().map(cp -> Character.isBmpCodePoint(cp) ? cp : '\uFFFD');
String str = converted.collect(StringBuilder::new, (buf, ch) -> buf.append((char) ch), StringBuilder::append).toString();
或者,在 Groovy 语法中:
def transform = { String it ->
char ch = it.charAt(0)
if (Character.isHighSurrogate(ch))
return '\uFFFD'
else if (Character.isLowSurrogate(ch))
return ''
else
return it;
}
utf8mb4string.collect(transform).join()
目前,我在接收来自用户手机的字符串输入时遇到问题。 输入的字符串包含 utf8mb4 字符(笑脸、表情符号等)。 这导致我的后端出错 (mysql),因为它只接受 utf-8 输入。
现在,我怎样才能将所有 utf-8mb4 输入替换为 utf-8?
def utf8mb4string = '';
// parse the utf8mb4string to utf8
// logic here
//possible utf8 result maybe: '�������'
我在这里也发现了类似的问题How would I convert UTF-8mb4 to UTF-8? 但还没有明确的答案,尤其是在 Groovy.
中的实施您 can't store characters(如 "man with turban")来自基本多语言平面 (BMP) 之外,使用 MySQL 命名不当的 "utf8" 编码。您需要改为指定 "utf8mb4"。
如果您不想存储这些字符,并且想要替换或丢弃它们,则必须遍历字符串,并构建一个新字符串(在 Java 中):
IntStream converted = utf8mb4string.codePoints().map(cp -> Character.isBmpCodePoint(cp) ? cp : '\uFFFD');
String str = converted.collect(StringBuilder::new, (buf, ch) -> buf.append((char) ch), StringBuilder::append).toString();
或者,在 Groovy 语法中:
def transform = { String it ->
char ch = it.charAt(0)
if (Character.isHighSurrogate(ch))
return '\uFFFD'
else if (Character.isLowSurrogate(ch))
return ''
else
return it;
}
utf8mb4string.collect(transform).join()