gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 07:01:20 26 4
gpt4 key购买 nike

我在网站上有一个文本区域,用户可以在其中写任何东西。当用户复制粘贴一些包含非 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,不要混合编码,也不要使用平台的默认编码。

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

How to get UTF-8 working in Java webapps?

关于java - 从 String 中删除不适合 UTF-8 编码的字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27794993/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com