将字符串编码为UTF-8

217

我有一个包含“ñ”字符的字符串,并且我遇到了一些问题。我需要将这个字符串编码为UTF-8编码。我已经尝试了下面的方式,但它没有起作用:

byte ptext[] = myString.getBytes();
String value = new String(ptext, "UTF-8");

我该如何将该字符串编码为 utf-8?


2
不太清楚你的意图是什么。myString 是否正确包含 ñ 字符而你却在将其转换为字节数组时遇到了问题(如果是这种情况,请查看 Peter 和 Amir 的答案),还是 myString 已经损坏,而你正在试图修复它(如果是这种情况,请查看 Joachim 和我的答案)? - Michael Borgwardt
我需要使用UTF-8编码将myString发送到服务器,并且我需要将字符"ñ"转换为UTF-8编码。 - Alex
1
如果那个服务器期望的是UTF-8编码,那么你需要发送的是字节而不是字符串。所以根据Peter的回答,在第一行指定编码并删除第二行。 - Michael Borgwardt
@Michael:我同意这里的真正意图并不清楚。似乎有很多问题是关于人们试图在字符串和字节之间进行显式转换,而不是让{In,Out}putStream{Read,Writ}ers自己完成。我想知道为什么? - tchrist
1
@Michael:谢谢,我想那也是有道理的。但这也让事情比它需要的更难了,不是吗?我不是很喜欢那种工作方式的语言,所以尽量避免使用它们。我认为 Java 的字符字符串模型而不是字节使事情变得更容易。Perl 和 Python 也共享“一切都是 Unicode 字符串”的模式。 是的,在所有三个中,如果你努力工作仍然可以获得字节,但在实践中似乎真正需要这样做的情况很少:那是相当低级的。此外,如果你知道我的意思,这感觉有点像朝错误的方向刷猫毛 :)。 - tchrist
显示剩余4条评论
12个回答

0

这解决了我的问题

    String inputText = "some text with escaped chars"
    InputStream is = new ByteArrayInputStream(inputText.getBytes("UTF-8"));

0
正确的解决方案也是:
String myUTF8String = new String(sourceISOString.getBytes(Charsets.ISO_8859_1), Charsets.UTF_8);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接