mch*_*erm 225 java string encoding character-encoding
在Java中,我有一个String,我想将其编码为字节数组(UTF8或其他编码).或者,我有一个字节数组(在一些已知的编码中),我想将其转换为Java字符串.我该如何进行这些转换?
mch*_*erm 329
从String转换为byte []:
String s = "some text here";
byte[] b = s.getBytes(StandardCharsets.UTF_8);
从byte []转换为String:
byte[] b = {(byte) 99, (byte)97, (byte)116};
String s = new String(b, StandardCharsets.US_ASCII);
当然,您应该使用正确的编码名称.我的例子使用了US-ASCII和UTF-8这两种最常见的编码.
M. *_*ard 92
这是一个避免为每次转换执行Charset查找的解决方案:
import java.nio.charset.Charset;
private final Charset UTF8_CHARSET = Charset.forName("UTF-8");
String decodeUTF8(byte[] bytes) {
    return new String(bytes, UTF8_CHARSET);
}
byte[] encodeUTF8(String string) {
    return string.getBytes(UTF8_CHARSET);
}
Jor*_*ira 17
String original = "hello world";
byte[] utf8Bytes = original.getBytes("UTF-8");
pai*_*ego 12
我的tomcat7实现接受字符串为ISO-8859-1; 尽管HTTP请求的内容类型.在尝试正确解释像'é'这样的字符时,以下解决方案对我有用.
byte[] b1 = szP1.getBytes("ISO-8859-1");
System.out.println(b1.toString());
String szUT8 = new String(b1, "UTF-8");
System.out.println(szUT8);
尝试将字符串解释为US-ASCII时,未正确解释字节信息.
b1 = szP1.getBytes("US-ASCII");
System.out.println(b1.toString());
作为替代方案,可以使用Apache Commons的StringUtils.
 byte[] bytes = {(byte) 1};
 String convertedString = StringUtils.newStringUtf8(bytes);
要么
 String myString = "example";
 byte[] convertedBytes = StringUtils.getBytesUtf8(myString);
如果您有非标准字符集,则可以相应地使用getBytesUnchecked()或newString().
小智 6
我无法发表评论,但不想开始新话题。但这不起作用。简单的往返:
byte[] b = new byte[]{ 0, 0, 0, -127 };  // 0x00000081
String s = new String(b,StandardCharsets.UTF_8); // UTF8 = 0x0000, 0x0000,  0x0000, 0xfffd
b = s.getBytes(StandardCharsets.UTF_8); // [0, 0, 0, -17, -65, -67] 0x000000efbfbd != 0x00000081
我需要 b[] 编码前后相同的数组,但它不是(这引用了第一个答案)。
| 归档时间: | 
 | 
| 查看次数: | 619113 次 | 
| 最近记录: |