我正在调用一个错误的服务,告诉我下面的字符串存在编码问题:
普适
据我理解,这个字符串是"utf8“编码的。这是对utf8编码的正确理解吗?如果是这样的话,这是否表明我应该删除utf8编码?如果是的话,对于如何在Java中对utf8字符串进行去编码,有什么建议吗?
或者我错了,上面的字符串不是utf8编码的吗?如果是的话,有什么建议来对它进行编码吗?
发布于 2015-09-11 14:11:47
Java存储字符串的方式与它在消息中的编码方式不同。你可以尝试这样的方法:
String s = "Universal®";
byte[] encoded = s.getBytes(Charset.forName("UTF-8"));您必须捕获UnsupportedCharsetException,但是UTF-8是一个标准的可用字符集。
或者您可能需要在发送API中设置编码,比如HTTP。
发布于 2015-09-11 14:36:37
带有® U+00AE的“Universal”不能用普通的7位ASCII表示,尽管它可以用其他几个字符集/编码来表示。通用Unicode编码UTF-8可以混合任何脚本。
在某些编码中,需要将文本转换为字节,才能声明其编码。
在java中,字符串在内部是Unicode,可以处理任何事情。
但是,由于java源代码编码是免费的,所以它必须与java编译器javac使用的编码相同。但是,您可以使用u转义,使用ASCII来表示特殊符号(在UTF-16范围内):
String s = "Universal\u00AE";
byte[] bytes = s.getBytes(StandardCharsets.UTF_8);
String t = new String(bytes, StandardCharsets.UTF_8);
assert t.equals(s);发布于 2015-09-11 14:04:45
在非常普遍的意义上,编码只是位的分类和分配,用于表示字符串。有关更多详细信息,请参阅下面的链接。通常,所有编码类型都是可以相互转换的,但也有一些例外。您可能已经看到了标记不能显示的符号的大型空白方块/等等。这通常是由编码错误(例如该编码方案不存在的字符)引起的。
https://en.wikipedia.org/wiki/UTF-8
根据您的具体问题,列出的字符串应该是UTF-8可编码的.它可能是以另一种编码类型保存的(这可能会导致问题)。你总是可以尝试把它转换成UTF-8,看看会发生什么。
编辑-关于注释,我认为问题与在尝试通过服务(或服务)传输它之前没有正确编码有关。
https://stackoverflow.com/questions/32525201
复制相似问题