在Java中,我有一个字符串,我想将它编码为字节数组(在UTF8中,或其他编码中)。或者,我有一个字节数组(在一些已知的编码中),我想将它转换为Java String。我怎么做这些转换?
当前回答
你可以直接通过String(byte[], String)构造函数和getBytes(String)方法进行转换。Java通过Charset类公开可用的字符集。JDK文档列出了支持的编码。
90%的情况下,这样的转换是在流上执行的,所以你可以使用Reader/Writer类。您不能在任意字节流上使用String方法进行增量解码——您可能会遇到涉及多字节字符的错误。
其他回答
将字符串转换为字节[]:
String s = "some text here";
byte[] b = s.getBytes(StandardCharsets.UTF_8);
将字节[]转换为字符串:
byte[] b = {(byte) 99, (byte)97, (byte)116};
String s = new String(b, StandardCharsets.US_ASCII);
当然,您应该使用正确的编码名称。我的示例使用了US-ASCII和UTF-8这两种常用的编码。
//query is your json
DefaultHttpClient httpClient = new DefaultHttpClient();
HttpPost postRequest = new HttpPost("http://my.site/test/v1/product/search?qy=");
StringEntity input = new StringEntity(query, "UTF-8");
input.setContentType("application/json");
postRequest.setEntity(input);
HttpResponse response=response = httpClient.execute(postRequest);
非常晚,但我刚刚遇到了这个问题,这是我的解决方案:
private static String removeNonUtf8CompliantCharacters( final String inString ) {
if (null == inString ) return null;
byte[] byteArr = inString.getBytes();
for ( int i=0; i < byteArr.length; i++ ) {
byte ch= byteArr[i];
// remove any characters outside the valid UTF-8 range as well as all control characters
// except tabs and new lines
if ( !( (ch > 31 && ch < 253 ) || ch == '\t' || ch == '\n' || ch == '\r') ) {
byteArr[i]=' ';
}
}
return new String( byteArr );
}
String original = "hello world";
byte[] utf8Bytes = original.getBytes("UTF-8");
你可以直接通过String(byte[], String)构造函数和getBytes(String)方法进行转换。Java通过Charset类公开可用的字符集。JDK文档列出了支持的编码。
90%的情况下,这样的转换是在流上执行的,所以你可以使用Reader/Writer类。您不能在任意字节流上使用String方法进行增量解码——您可能会遇到涉及多字节字符的错误。
推荐文章
- Java 8接口方法中不允许“同步”的原因是什么?
- 如何找到Java堆大小和内存使用(Linux)?
- c#:如何获得一个字符串的第一个字符?
- String类中的什么方法只返回前N个字符?
- 我可以将c#字符串值转换为转义字符串文字吗?
- 使用Enum实现单例(Java)
- RabbitMQ与通道和连接之间的关系
- buildSessionFactory()配置方法在Hibernate中已弃用?
- Spring MVC -如何获得所有的请求参数在一个地图在Spring控制器?
- 在c#中解析字符串为日期时间
- 如何在Java中按两个字段排序?
- 文件之间的差异。路径中的分隔符和斜杠
- 字符串中的单词大写
- 在方法参数中使用NotNull注释
- Spring MVC中处理可选参数的@RequestParam