Java UTF8编码问题?

Java UTF8编码问题?,java,utf-8,Java,Utf 8,我正在呼叫一个出现错误的服务,告诉我以下字符串存在编码问题: 环球® 据我所知,这个字符串是“utf8”编码的。这是对utf8编码的正确理解吗?如果是,这是否表明我应该删除utf8编码?如果是这样的话,有没有关于如何在Java中对utf8字符串进行反编码的建议 还是我错了,上面的字符串不是utf8编码的?如果是这样的话,有没有关于如何编码的建议?快速浏览一下这里:(我们应该知道,如果不看,人们)就会发现@确实是一个utf8字符。所以,不知道什么样的框架抱怨它不是这样的,但它是错误的在非常普遍的意

我正在呼叫一个出现错误的服务,告诉我以下字符串存在编码问题:

环球®

据我所知,这个字符串是“utf8”编码的。这是对utf8编码的正确理解吗?如果是,这是否表明我应该删除utf8编码?如果是这样的话,有没有关于如何在Java中对utf8字符串进行反编码的建议


还是我错了,上面的字符串不是utf8编码的?如果是这样的话,有没有关于如何编码的建议?

快速浏览一下这里:(我们应该知道,如果不看,人们)就会发现@确实是一个utf8字符。所以,不知道什么样的框架抱怨它不是这样的,但它是错误的

在非常普遍的意义上,编码只是位的分类和分配,用于表示字符串。有关更多详细信息,请参阅下面的链接。一般来说,所有编码类型都可以相互转换,但也有一些例外。您可能已经看到了大的空白方块/etc,它们标记了无法显示的符号。这通常是由编码错误(例如该编码方案不存在的字符)引起的

根据您的具体问题,列出的字符串应该是UTF-8可编码的。它可能已保存在其他编码类型中(这可能会导致您的问题)。您可以尝试将其转换为UTF-8,看看会发生什么

编辑
-关于注释,我认为问题与在尝试通过服务(或服务)传输字符串之前未正确编码有关。

Java存储字符串的方式与消息中的编码方式不同。您可以尝试以下方法:

String s = "Universal®";
byte[] encoded = s.getBytes(Charset.forName("UTF-8"));
您必须捕获
不支持的charsetException
,但UTF-8是一个标准的可用字符集

或者您可能需要在发送API中设置编码,如HTTP
Content-Type:text/plain;字符集=UTF-8

带有
®
U+00AE的“Universal®”不能用普通的7位ASCII表示,尽管它可以用其他几个字符集/编码表示。通用Unicode编码
UTF-8
可以混合任何脚本

在某些编码中,需要将文本转换为字节,才能说明其编码

在java中,字符串在内部是Unicode的,可以处理任何事情

但是,由于java源代码编码是免费的,因此它必须与java编译器javac使用的编码相同。但是,您可以使用u形转义,使用ASCII表示特殊符号(在UTF-16范围内):


“编码问题”-你能更具体一点吗?它是否显示不正确,或者它是否给了您一个特定的错误?对不起,这是我的问题的一部分,我收到的错误正是如此模糊。上面写着“编码问题”。这就是为什么我想知道这是否意味着我是utf8编码的,而我不应该是,或者我不是utf8编码的,我应该是。“调用服务”-如何?肥皂?java方法调用?在java
String
对象的上下文中,
String
在内部没有用UTF-8编码。它是用UTF-16编码的。不过,这在很大程度上是无关紧要的:问题在于如何将字符串数据传输到您试图调用的服务,以及该服务希望您如何这样做。很明显,这些是不匹配的。查看字符串的渲染输出并不能说明什么。有意义的是底层二进制值。@should是®,但是它仍然适用于UTF-8(我认为注册符号),UTF-8是一种编码。是的,它可以对character®进行编码,但这与该字符的特定字节序列编码是否使用UTF-8无关,而不是使用几种可选方法中的任何一种。您所说的一切都是正确的,但这似乎并不能很好地回答问题。对于Java 7+,您可以使用
标准字符集.UTF_8
而不是
字符集.forName(“UTF-8”)
@Andreas Sweet!我还没抓到零钱。现在,我不必对无用的样板文件感到恼火—尝试/捕获UTF-8字符集。:)
String s = "Universal\u00AE";
byte[] bytes = s.getBytes(StandardCharsets.UTF_8);
String t = new String(bytes, StandardCharsets.UTF_8);
assert t.equals(s);