gpt4 book ai didi

java - java中如何准确获取UTF-8字符串?

转载 作者:行者123 更新时间:2023-12-01 17:23:36 25 4
gpt4 key购买 nike

我想从下面的代码中获取 UTF-8 字符串:

String tmpStr= "ALMS_à¸à¸±à¹à¸à¸à¸­à¸à¸¥à¸à¸à¸°à¹à¸à¸µà¸¢à¸.pdf";
String fileName = new String(tmpStr.getBytes(), Charset.forName("UTF_8"));

但是当我调试时,fileName 的值错误如下:ALMS_??????????????????????????????????????.pdf enter image description here

当我在线测试转换时,它工作正常: enter image description here

谁能帮我解决这个问题吗?谢谢。我正在使用 eclipse 编写 java 代码,并在其中配置编码 UTF-8。

最佳答案

不知道你从哪里得到初始字符串,但 Java 内部使用 UTF-16 来表示字符串。

当您需要序列化字符串以通过连接传输、将其存储在数据库中、在文本文件中打印或在网页上打印时,使用编码是有意义的。

传输/存储/打印的是所选编码中字符串的字节数组表示形式。

通过连接、文件或数据库接收/读取值时也是如此。您需要以正确的编码解释字节。

String 提供了一个 getBytes() 方法,该方法使用平台默认编码获取 String 的表示形式,不推荐这样做,因为它使代码依赖于平台。您可以使用字符串、getBytes("UTF-8") 或字符集来提供编码。从 Java 1.7 开始,StandardCharsets 类为必须支持 JVM 的编码提供了快捷方式,因此您可以使用 getBytes(StandardCharsets.UTF_8)

现在,您的代码应该是这样的:

String tmpStr= "ALMS_à¸à¸±à¹à¸à¸à¸­à¸à¸¥à¸à¸à¸°à¹à¸à¸µà¸¢à¸.pdf";  
String fileName = new String(tmpStr.getBytes(StandardCharsets.UTF_8), StandardCharsets.UTF_8);

但这不会产生您期望的字符串,这只会获取 tmpStr 的 UTF-8 字节表示形式,并创建一个新的字符串表示形式来读取该 UTF-8 字节表示形式。因此,在此之后,您可以断言 tmpStr 等于 filename

我怀疑您所暴露的问题与您从哪里读取 tmpStr 值以及首先使用什么编码将其转换为字符串有关。

关于java - java中如何准确获取UTF-8字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61246170/

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