जावा स्ट्रिंग को ASCII बाइट सरणी में कैसे बदलें?
जावा स्ट्रिंग को ASCII बाइट सरणी में कैसे बदलें?
जवाबों:
byte[] b = s.getBytes(StandardCharsets.US_ASCII);
अगर आप ए अमरूदउपयोगकर्ता एक आसान Charsets
वर्ग है:
String s = "Hello, world!";
byte[] b = s.getBytes(Charsets.US_ASCII);
आपके स्रोत कोड में हार्ड-कोडिंग मनमाने ढंग से नाम न रखने के अलावा इसका एक बहुत बड़ा फायदा है: Charsets.US_ASCII
यह Charset
प्रकार का है (नहीं String
) तो आप UnsupportedEncodingException
केवल फेंके गए चेक से बचें String.getBytes(String)
, लेकिन इससे नहीं String.getBytes(Charset)
।
जावा 7 में बराबर StandardCharsets
क्लास है।
String.getBytes(Charset)
यह है कि एपीआई 9 :( तक जोड़ा नहीं गया था , इसलिए यदि आप Froyo और इसके बाद के संस्करण को लक्षित करना चाहते हैं, तो आप ऐसा नहीं कर सकते हैं।
आपके द्वारा आजमाए गए कोड में केवल एक वर्ण गलत है:
Charset characterSet = Charset.forName("US-ASCII");
String string = "Wazzup";
byte[] bytes = String.getBytes(characterSet);
^
ऊपरी स्थिति "स्ट्रिंग" पर ध्यान दें। यह स्ट्रिंग क्लास पर एक स्थिर विधि को लागू करने की कोशिश करता है, जो मौजूद नहीं है। इसके बजाय आपको अपनी स्ट्रिंग आवृत्ति पर विधि को लागू करने की आवश्यकता है:
byte[] bytes = string.getBytes(characterSet);
getBytes(Charset)
विधि उन वर्णों को प्रतिस्थापित करने के लिए निर्दिष्ट है जिन्हें एन्कोड नहीं किया जा सकता है। US-ASCII के साथ, यह प्रतिस्थापन चार्ट प्रश्न चिह्न है, इसलिए आपके बाइट सरणी में '?' के ASCF मान के साथ एक तत्व है? (६३) है।
अन्य प्रस्तावित समाधानों के साथ समस्या यह है कि वे या तो उन वर्णों को छोड़ देंगे जिन्हें सीधे ASCII पर मैप नहीं किया जा सकता है, या उन्हें एक मार्कर वर्ण की तरह बदल सकते हैं ?
।
आप उदाहरण के लिए उच्चारण उच्चारण चरित्र के बिना उसी चरित्र में परिवर्तित करने की इच्छा कर सकते हैं। ऐसा करने के लिए कुछ ट्रिक्स हैं (जिसमें स्वयं एक स्टैटिक मैपिंग टेबल बनाना या यूनिकोड के लिए मौजूदा 'सामान्यीकरण' का लाभ उठाना शामिल है), लेकिन वे विधियाँ पूरी तरह से दूर हैं।
आपका सबसे अच्छा दांव जूनियरबॉक्स लाइब्रेरी का उपयोग कर रहा है, जो या तो पूरा नहीं हो सकता है, लेकिन यूनिकोड को एएससीआईआई में अनुवाद करने के सबसे समझदार तरीके से बहुत सारे अनुभव को शामिल करता है।
यदि आपको Android में इसकी आवश्यकता है और आप इसे FroYo से अधिक पुरानी किसी भी चीज़ के साथ काम करना चाहते हैं, तो आप EncodingUtils.getAsciiBytes () का भी उपयोग कर सकते हैं :
byte[] bytes = EncodingUtils.getAsciiBytes("ASCII Text");
मेरे स्ट्रिंग में मेरे पास थाई अक्षर (TIS620 एन्कोडेड) और जर्मन umlauts हैं। चुस्त से जवाब मुझे सही रास्ते पर डाल दिया। .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;
}
मुझे इसका हल मिल गया। दरअसल Android में Base64 क्लास उपलब्ध नहीं है। अधिक जानकारी के लिए नीचे लिंक दिया गया है।
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();
}
}
}