java – 从String中删除不适合UTF-8编码的字符

前端之家收集整理的这篇文章主要介绍了java – 从String中删除不适合UTF-8编码的字符前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

我在网站上有一个文本区域,用户可以在其中编写任何内容.当用户复制粘贴某些文本或包含非UTF 8字符的内容并将其提交给服务器时,会出现问题.

Java成功处理它,因为它支持UTF-16,但我的MysqL支持UTF-8,因此插入失败.

我试图在业务逻辑本身中实现某种方式,删除任何不适合UTF-8编码的字符.

目前我正在使用此代码

new String(java.nio.charset.Charset.forName("UTF-8").encode(myString).array());

但它用其他一些不起眼的字符替换不适合UTF-8的字符.这对最终用户来说也不好看.请问有人可以使用Java代码解决任何可能的解决方案吗?

编辑:例如,插入这些值时我得到的异常

java.sql.sqlException: Incorrect string value: '\xF0\x9F\x98\x8A\x0D\x0A...' for column

java.sql.sqlException: Incorrect string value: '\xF0\x9F\x98\x80\xF0\x9F...' for column
最佳答案
UTF-8不是字符集,它是一种字符编码,就像UTF-16一样.

UTF-8能够将任何unicode字符和任何unicode文本编码为字节序列,因此不存在不适合UTF-8的字符.

您正在使用String的构造函数,它只接受一个字节数组(String(byte[] bytes)),根据javadocs:

Constructs a new String by decoding the specified array of bytes using the platform’s default charset.

它使用平台的默认字符集来解释字节(将字节转换为字符).不要使用它.而是在将字节数组转换为String时,使用String(byte[] bytes,Charset charset)构造函数指定要明确使用的编码.

如果您遇到某些字符的问题,那很可能是由于在服务器端和客户端使用不同的字符集或编码(brownser HTML).确保在任何地方都使用UTF-8,不要混合编码,也不要使用平台的默认编码.

一些阅读如何实现这一点:

How to get UTF-8 working in Java webapps?

原文链接:https://www.f2er.com/mysql/433494.html

猜你在找的MySQL相关文章