Java 문자열을 ASCII 바이트 배열로 변환하는 방법은 무엇입니까?


답변:


157

getBytes방법을 사용하여 적절한 Charset(또는 Charset이름)을 지정합니다.

예:

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

(자바 7 전 : byte[] b = s.getBytes("US-ASCII");)


10
그게 얼마나 쉬웠는지 약간 부끄럽습니다.
농장 타조

4
이렇게하면 '\ u00e0'(& agrave;)와 같은 매핑 할 수없는 문자가 '?'로 변환됩니다. 그것을 'a'로 변환하는 방법이 있으면 더 좋을 것입니다.
Arnout Engelen

11
Java 7 이상을 사용하는 사람들의 경우 표준 문자 집합에 대한 일부 상수를 포함하는 StandardCharsets 클래스를 사용하십시오 . byte[] b = s.getBytes(StandardCharsets.US_ASCII);
Alexis C.

23

당신이 사용자에게 편리한 Charsets수업이 있습니다.

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) :( 그래서 때까지 추가되지 않았습니다.
yincrash

5

시도한 코드에 잘못된 문자가 하나뿐입니다.

Charset characterSet = Charset.forName("US-ASCII");
String string = "Wazzup";
byte[] bytes = String.getBytes(characterSet);
               ^

대문자 "String"을 확인하십시오. 존재하지 않는 문자열 클래스에서 정적 메서드를 호출하려고합니다. 대신 문자열 인스턴스에서 메서드를 호출해야합니다.

byte[] bytes = string.getBytes(characterSet);

그렇다면 히브리어 문자가 1 바이트 (ascii 인코딩)를 취하고, 심지어 ascii에 존재하지 않을 수 있는지 알려주세요. 수동으로 지정했기 때문에 기본 encodung을 사용하지 않습니다. i.stack.imgur.com/5WPD3.jpg
Royi Namir

@RoyiNamir : 이것은 새로운 질문으로 더 잘 게시 될 수 있지만, 그 이유는 문자가 US-ASCII에서 getBytes(Charset)인코딩 할 수없고 인코딩 할 수없는 문자를 대체하도록 지정되어 있기 때문입니다. US-ASCII에서이 대체 문자는 물음표이므로 바이트 배열에는 ASCII 값이 '?'인 요소 하나가 포함됩니다. (63).
Jörn Horstmann

5

다른 제안 된 솔루션의 문제점은 ASCII에 직접 매핑 할 수없는 문자를 삭제하거나 ?.

예를 들어 악센트 부호가있는 문자를 악센트없이 동일한 문자로 변환 할 수 있습니다. 이를 수행하는 몇 가지 트릭이 있지만 (직접 정적 매핑 테이블을 작성하거나 유니 코드에 대해 정의 된 기존 '정규화'를 활용하는 것을 포함하여) 이러한 방법은 완전하지 않습니다.

가장 좋은 방법은 junidecode를 사용하는 것입니다. 라이브러리를 라이브러리 완전 할 수는 없지만 유니 코드를 ASCII로 음역하는 가장 건전한 방법으로 많은 경험을 통합합니다.



4

Android에서이 기능이 필요하고 FroYo 이전 버전에서 작동하도록하려면 EncodingUtils.getAsciiBytes () 사용할 수도 있습니다 .

byte[] bytes = EncodingUtils.getAsciiBytes("ASCII Text");

1
이것은 실제로 꽤 좋은 팁입니다! 안드로이드 getBytes (...) 심지어 ICS +에서 제대로 작동하지 않습니다
이상한

어디에서도 EncodingUtils를 찾을 수 없습니까?
behelit

1
@behelit 내 링크를 따라 가면 다음 비트로 리디렉션됩니다. developer.android.com/about/versions/marshmallow/… 기본적으로 Apache HTTP 라이브러리를 수동으로 포함해야한다고 말합니다.
dain

그러나 문서 만 찾는 경우 "apache http encodingutils"를 검색하면 다음과 같은 유용한 결과를 얻을 수 있습니다. hc.apache.org/httpcomponents-core-ga/httpcore/apidocs/org/…
dain

3

내 문자열에는 태국 문자 (TIS620 인코딩)와 독일어 움라우트가 있습니다. 애 질스의 대답은 저를 올바른 길로 인도했습니다. .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;
  }

0

문자열을 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);
   }


-2

이 시도:

/**
 * @(#)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();
        }
    }
}
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.