我在网站上有一个文本区域,用户可以在其中编写任何内容.当用户复制粘贴某些文本或包含非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一样.
原文链接:https://www.f2er.com/mysql/433494.htmlUTF-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,不要混合编码,也不要使用平台的默认编码.
一些阅读如何实现这一点: