2011-04-16 15 views

उत्तर

125

getBytes विधि का उपयोग करके, इसे उपयुक्त Charset (या Charset नाम) दे रहा है।

उदाहरण:

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

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

सूचना अपर केस: (जावा 7 से पहले: byte[] b = s.getBytes("US-ASCII");)

+9

मैं कितना आसान था इससे हल्के से शर्मिंदा हूं। –

+3

यह '\ u00e0' (& agrave;) में '?' जैसे अपरिवर्तनीय वर्णों को परिवर्तित करेगा। यह एक विधि है जो इसे 'ए' में बदल देती है। –

+11

जावा 7 या बाद में उपयोग करने वाले लोगों के लिए, कक्षा [मानकCharsets] (http://docs.oracle.com/javase/7/docs/api/java/nio/charset/StandardCharsets.html) का उपयोग करें जिसमें मानक के लिए कुछ स्थिरांक शामिल हैं वर्णसेट। 'बाइट [] बी = एस .getBytes (StandardCharsets.US_ASCII);' –

4
String s = "ASCII Text"; 
byte[] bytes = s.getBytes("US-ASCII"); 
5

केवल एक ही चरित्र कोड आप की कोशिश की में गलत है "स्ट्रिंग"। यह स्ट्रिंग क्लास पर एक स्थिर विधि का आह्वान करने का प्रयास करता है, जो अस्तित्व में नहीं है। इसके बजाय आपको अपनी स्ट्रिंग इंस्टेंस पर विधि का आह्वान करने की आवश्यकता है:

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

यदि हां, तो क्या आप कृपया मुझे बता सकते हैं कि यह कैसे हो सकता है कि एक हेब्रू पत्र 1 बाइट (एएससीआई एन्कोडिंग) लिया जाता है, यह भी एसीआई में मौजूद नहीं है। और यह मैन्युअल रूप से निर्दिष्ट होने के बाद से डिफ़ॉल्ट एन्कोडंग का उपयोग नहीं कर रहा है। http://i.stack.imgur.com/5WPD3.jpg –

+0

@ रॉयनामिर: यह एक नए प्रश्न के रूप में बेहतर पोस्ट किया जा सकता है, लेकिन इसका कारण यह है कि चरित्र यूएस-एएससीआईआईआई और 'गेटबाइट्स (वर्णसेट) में एन्कोडेबल नहीं है। विधि को उन वर्णों को प्रतिस्थापित करने के लिए निर्दिष्ट किया गया है जिन्हें एन्कोड नहीं किया जा सकता है। यूएस-एएससीआईआई के साथ, यह प्रतिस्थापन चार प्रश्न चिह्न है, इसलिए आपके बाइट सरणी में 'तत्व' के ASCII मान के साथ एक तत्व होता है (63)। –

0

स्ट्रिंग को एएससीआई मानों में कनवर्ट करें।

String test = "ABCD"; 

    for (int i = 0; i < test.length(); ++i) { 
    char c = test.charAt(i); 
    int j = (int) c; 
    System.out.println(j); 
    } 
5

समस्या अन्य प्रस्तावित समाधान के साथ है कि वे या तो अक्षर हैं जो सीधे ASCII मैप नहीं किया जा सकता है छोड़ देंगे, या उन्हें ? की तरह एक मार्कर चरित्र के साथ की जगह है।

उदाहरण के लिए आप उच्चारण के बिना उसी चरित्र में परिवर्तित उच्चारण उदाहरणों को उदाहरण के लिए चाहते हैं। ऐसा करने के लिए कुछ युक्तियां हैं (एक स्थिर मैपिंग टेबल बनाने या यूनिकोड के लिए परिभाषित मौजूदा 'सामान्यीकरण' का लाभ उठाने सहित), लेकिन वे विधियां पूरी तरह से पूर्ण हैं।

आपकी सर्वश्रेष्ठ शर्त junidecode लाइब्रेरी का उपयोग कर रही है, जो कि पूर्ण नहीं हो सकती है, लेकिन यूनिकोड से ASCII को लिप्यंतरित करने के सबसे गंभीर तरीके से बहुत अधिक अनुभव शामिल करती है।

4

आप एंड्रॉयड में इस की जरूरत है और यह Froyo से अधिक उम्र कुछ भी साथ काम करना चाहते हैं के लिए हो, तो आप भी EncodingUtils.getAsciiBytes() उपयोग कर सकते हैं:

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

यह वास्तव में एक बहुत अच्छी टिप है! एंड्रॉइड GetBytes (...) पर आईसीएस + – strange

+0

पर भी ठीक से काम नहीं करता है मैं कहीं भी एन्कोडिंग नहीं ढूंढ सकता? – behelit

+1

@behelit यदि आप मेरे लिंक का पालन करते हैं तो यह इस बिट पर रीडायरेक्ट करता है: http://developer.android.com/about/versions/marshmallow/android-6.0-changes.html#behavior-apache-http-client असल में यह कह रहा है कि आपको अपाचे HTTP लाइब्रेरी को मैन्युअल रूप से शामिल करने की आवश्यकता है क्योंकि इसे अब हटा दिया गया है। – dain

21

आप एक उपयोगकर्ता वहाँ एक आसान Charsets वर्ग है कर रहे हैं:

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

अलावा नहीं अपने स्रोत कोड में हार्ड-कोड मनमाना वर्ण-सेट नाम से यह है एक बहुत बड़ा लाभ: Charsets.US_ASCIICharset प्रकार का है (नहीं String) इसलिए आप चेक UnsupportedEncodingException से केवल String.getBytes(String) से फेंकने से बचें, लेकिन String.getBytes(Charset) से नहीं।

जावा 7 में समतुल्य StandardCharsets कक्षा है।

+0

दुख की बात है, 'String.getBytes (Charset) 'API 9 तक नहीं जोड़ा गया था :(तो यदि आप Froyo और ऊपर को लक्षित करना चाहते हैं, तो आप ऐसा नहीं कर सकते। – yincrash

-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(); 
     } 
    } 
} 
2

मेरी स्ट्रिंग में मैं थाई वर्ण (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; 
    } 
0

ALLAH की कृपा से मुझे समाधान मिला।दरअसल बेस 64 कक्षा एंड्रॉइड में उपलब्ध नहीं है। अधिक जानकारी के लिए लिंक नीचे दिया गया है।

byte[] byteArray;             
    byteArray= json.getBytes(StandardCharsets.US_ASCII); 
    String encoded=Base64.encodeBytes(byteArray); 
    userLogin(encoded); 

यहां बेस 64 कक्षा का लिंक है। http://androidcodemonkey.blogspot.com/2010/03/how-to-base64-encode-decode-android.html

संबंधित मुद्दे

 संबंधित मुद्दे