如何将Java字符串转换为ASCII字节数组?
Answers:
byte[] b = s.getBytes(StandardCharsets.US_ASCII);
String s = "Hello, world!";
byte[] b = s.getBytes(Charsets.US_ASCII);
除了在源代码中有一个更大的优势不是硬编码字符集的任意名称:Charsets.US_ASCII
是的Charset
类型(没有String
),所以你避免被查UnsupportedEncodingException
仅抛出String.getBytes(String)
,而不是从String.getBytes(Charset)
。
在Java 7中,存在等效StandardCharsets
类。
String.getBytes(Charset)
没有添加到API 9 :(所以,如果你想要的目标的Froyo或以上,你不能这样做。
您尝试的代码中只有一个字符错误:
Charset characterSet = Charset.forName("US-ASCII");
String string = "Wazzup";
byte[] bytes = String.getBytes(characterSet);
^
注意大写的“ String”。这尝试在字符串类上调用静态方法,该方法不存在。相反,您需要在字符串实例上调用该方法:
byte[] bytes = string.getBytes(characterSet);
getBytes(Charset)
指定了该方法来替换无法编码的字符。对于US-ASCII,此替换字符是问号,因此您的字节数组包含一个ASCII值为“?”的元素。(63)。
其他提出的解决方案的问题在于它们将丢弃无法直接映射到ASCII的字符,或将其替换为标记字符,例如?
。
例如,您可能希望将重音字符转换为没有重音的相同字符。有很多技巧可以做到这一点(包括自己构建静态映射表或利用为unicode定义的现有“规范化”),但是这些方法远非完整。
最好的选择是使用junidecode库,该库也不完整,但是以将Unicode转换为ASCII的最明智的方式吸收了很多经验。
如果您碰巧在Android中需要此功能,并且希望使其与FroYo之前的版本兼容,则也可以使用EncodingUtils.getAsciiBytes():
byte[] bytes = EncodingUtils.getAsciiBytes("ASCII Text");
我找到了解决方案。实际上,Base64类在Android中不可用。下面提供了链接以获取更多信息。
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
尝试这个:
/**
* @(#)demo1.java
*
*
* @author
* @version 1.00 2012/8/30
*/
import java.util.*;
public class demo1
{
Scanner s=new Scanner(System.in);
String str;
int key;
void getdata()
{
System.out.println ("plase enter a string");
str=s.next();
System.out.println ("plase enter a key");
key=s.nextInt();
}
void display()
{
char a;
int j;
for ( int i = 0; i < str.length(); ++i )
{
char c = str.charAt( i );
j = (int) c + key;
a= (char) j;
System.out.print(a);
}
public static void main(String[] args)
{
demo1 obj=new demo1();
obj.getdata();
obj.display();
}
}
}