如何将Java字符串转换为ASCII字节数组?

如何将Java字符串转换为ASCII字节数组?

问题描述:

如何将Java字符串转换为ASCII字节数组?如何将Java字符串转换为ASCII字节数组?

使用getBytes方法,给它适当的Charset(或Charset名称)。

例子:

String s = "Hello, there."; 
byte[] b = s.getBytes(StandardCharsets.US_ASCII); 

(Java 7的前:byte[] b = s.getBytes("US-ASCII");

+9

我有点尴尬的多么容易。 – 2011-04-16 16:54:28

+3

这会将'\ u00e0'(à)等不可映射的字符转换为'?'。有一种将其转换为'a'的方法会更好。 – 2012-01-02 13:11:19

+11

对于使用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

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); 
+0

如果是这样,你能告诉我一个希伯来字母是如何取1个字节(ascii编码),它甚至不存在于ascii中。并且它不使用默认的编码,因为我手动指定。 http://i.stack.imgur.com/5WPD3.jpg – 2014-10-30 09:03:02

+0

@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"); 
+1

这实际上是一个很不错的提示!在Android上getBytes(...)即使在ICS上也不能正常工作+ – strange 2013-03-21 01:35:10

+0

我无法在任何地方找到EncodingUtils? – behelit 2016-04-15 00:22:21

+1

@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

如果你是一个用户有一个方便的Charsets类:

String s = "Hello, world!"; 
byte[] b = s.getBytes(Charsets.US_ASCII); 

除了在源代码中没有硬编码字符集的任意命名它具有更大的优势:Charsets.US_ASCIICharset型(不String)所以你避免检查UnsupportedEncodingException只从String.getBytes(String)抛出,但不是从String.getBytes(Charset)抛出。

在Java 7中有相当于StandardCharsets的类。

+0

不幸的是,'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