如何将Java字符串转换为ASCII字节数组?
使用getBytes
方法,传递正确的Charset
(或Charset
名称)。
例如:
String s = "Hello, there.";
byte[] b = s.getBytes(StandardCharsets.US_ASCII);
如果需要更多的控制(例如在遇到7位US-ASCII之外的字符时抛出异常),则可以使用CharsetDecoder
:
private static byte[] strictStringToBytes(String s, Charset charset) throws CharacterCodingException {
ByteBuffer x = charset.newEncoder().onMalformedInput(CodingErrorAction.REPORT).encode(CharBuffer.wrap(s));
byte[] b = new byte[x.remaining()];
x.get(b);
return b;
}
在Java 7之前,可以使用以下代码:byte[] b = s.getBytes("US-ASCII");
。Java 7引入了StandardCharsets
枚举、编码器以及专门的getBytes(Charset)
方法。
Charsets
。String s = "Hello, world!";
byte[] b = s.getBytes(Charsets.US_ASCII);
在你的源代码中,除了不要硬编码任意字符集名称之外,它还有一个更大的优点:Charsets.US_ASCII
是 Charset
类型(而不是 String
),因此你避免了从 String.getBytes(String)
抛出的已检查的 UnsupportedEncodingException
,但不会从 String.getBytes(Charset)
抛出。
在Java 7中有等价的StandardCharsets
类。
String.getBytes(Charset)
直到 API 9 才被添加 :( 因此,如果您想针对 Froyo 及以上版本,则不能使用该方法。 - yincrash您尝试的代码只有一个字符错误:
Charset characterSet = Charset.forName("US-ASCII");
String string = "Wazzup";
byte[] bytes = String.getBytes(characterSet);
^
byte[] bytes = string.getBytes(characterSet);
getBytes(Charset)
方法被指定为替换无法编码的字符。对于US-ASCII,这个替换字符是问号,所以你的字节数组包含一个元素,其ASCII值为'?'(63)。 - Jörn Horstmann?
标记字符来替换它们。String s = "ASCII Text";
byte[] bytes = s.getBytes("US-ASCII");
如果你需要在Android上使用这个功能并且想要让它能够在低于FroYo版本的设备中运行,你也可以使用EncodingUtils.getAsciiBytes():
byte[] bytes = EncodingUtils.getAsciiBytes("ASCII Text");
我字符串中有泰语字符(使用TIS620编码)和德语umlauts字符。agiles的回答让我找到了正确的解决方法。现在,我使用以下代码替代getBytes():
int len = mString.length(); // Length of the string
byte[] dataset = new byte[len];
for (int i = 0; i < len; ++i) {
char c = mString.charAt(i);
dataset[i]= (byte) c;
}
我找到了解决方案。实际上,Android中没有Base64类。以下是更多信息的链接。
byte[] byteArray;
byteArray= json.getBytes(StandardCharsets.US_ASCII);
String encoded=Base64.encodeBytes(byteArray);
userLogin(encoded);
这是 Base64 类的链接:http://androidcodemonkey.blogspot.com/2010/03/how-to-base64-encode-decode-android.html
将字符串转换为 ASCII 值。
String test = "ABCD";
for ( int i = 0; i < test.length(); ++i ) {
char c = test.charAt( i );
int j = (int) c;
System.out.println(j);
}
将字符串转换为ASCII字节数组:
String s1 = "Hello World!";
byte[] byteArray = s1.getBytes(StandardCharsets.US_ASCII);
// Now byteArray is [72, 101, 108, 108, 111, 32, 87, 111, 114, 108, 100, 33]
将ASCII字节数组转换为字符串:
String s2 = new String(byteArray, StandardCharsets.US_ASCII));
byte[] b = s.getBytes(StandardCharsets.US_ASCII);
- Alexis C.getBytes(Charset)
是在 Java 6 中引入的。 - Dávid Horváth