如何将Java字符串转换为ASCII字节数组?
String s = "ASCII Text";
byte[] bytes = s.getBytes("US-ASCII");
只有一个字错在你尝试代码:
Charset characterSet = Charset.forName("US-ASCII");
String string = "Wazzup";
byte[] bytes = String.getBytes(characterSet);
^
注意大写“串”。这会尝试在字符串类上调用一个不存在的静态方法。相反,您需要调用字符串实例上的方法:
byte[] bytes = string.getBytes(characterSet);
如果是这样,你能告诉我一个希伯来字母是如何取1个字节(ascii编码),它甚至不存在于ascii中。并且它不使用默认的编码,因为我手动指定。 http://i.stack.imgur.com/5WPD3.jpg – 2014-10-30 09:03:02
@RoyiNamir:这可能会更好地发布为新问题,但原因是该字符在US-ASCII和getBytes(字符集)中不可编码,方法被指定替换无法编码的字符。对于US-ASCII,这个替换字符是问号,所以你的字节数组包含一个ASCII值为'?'的元素。 (63)。 – 2014-10-30 11:55:00
将字符串转换为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字符,或者像?
标记字符替换它们。
您可能希望将重音字符转换为没有重音的相同字符。有几个技巧可以做到这一点(包括自己构建静态映射表或利用为unicode定义的现有“规范化”),但这些方法远未完成。
最好的办法是使用junidecode这个库,它不能完成,但是它以最正常的将Unicode转换为ASCII的方式结合了大量经验。
如果您正好需要这在Android和希望把它与任何东西比升级Froyo更早的版本,你也可以使用EncodingUtils.getAsciiBytes():
byte[] bytes = EncodingUtils.getAsciiBytes("ASCII Text");
这实际上是一个很不错的提示!在Android上getBytes(...)即使在ICS上也不能正常工作+ – strange 2013-03-21 01:35:10
我无法在任何地方找到EncodingUtils? – behelit 2016-04-15 00:22:21
@behelit如果你按照我的链接它重定向到这个位:http://developer.android.com/about/versions/marshmallow/android-6.0-changes.html#behavior-apache-http-client 基本上说,您需要手动包含Apache HTTP库,因为它现在已被弃用。 – dain 2016-04-16 11:48:39
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和以上,你不能这样做。 – yincrash 2012-09-07 19:15:31
试试这个:
/**
* @(#)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();
}
}
}
在我的字符串我有泰语字符(TIS620编码)和德国的变音符号。 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;
}
由于ALLAH的恩典我找到了解决方案。实际上,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
我有点尴尬的多么容易。 – 2011-04-16 16:54:28
这会将'\ u00e0'(&agrave;)等不可映射的字符转换为'?'。有一种将其转换为'a'的方法会更好。 – 2012-01-02 13:11:19
对于使用Java 7或更高版本的用户,请使用包含标准常量的类[StandardCharsets](http://docs.oracle.com/javase/7/docs/api/java/nio/charset/StandardCharsets.html)字符集。 'byte [] b = s.getBytes(StandardCharsets.US_ASCII);' – 2014-05-15 22:29:25