दिलचस्प पोस्ट
एंड्रॉइड कॉलम '_id' मौजूद नहीं है? PHP – xml- सुरक्षित मान बनाने के लिए htmlentities () पर्याप्त है? जब कोई उपयोगकर्ता एक नया उदाहरण खोलने का प्रयास करता है, तो पहले से ही खुला एप्लिकेशन पर वापस लौटें मैं कैसे जीआईटी को दिखा सकता हूं कि कौन सी शाखाएं चल रही हैं? UIWebView के बजाय MPMoviePlayerController के साथ YouTube वीडियो चलाएं Google Play या Side-Load से एक एप्लिकेशन को कैसे स्थापित किया गया है? Android WebView वीएस फोन ब्राउज़र sizeof ऑपरेटर के साथ समस्या jdbctemplate के माध्यम से एसक्यूएल सम्मिलन से पहचान पायथन फाइल में सहेजें MySQL में आउटपुट क्लॉज एंड्रॉइड: स्पिनर को कस्टम ऑब्जेक्ट लिस्ट में बाँध कैसे करें? मैं एक सबड्यूल कैसे निकालूं? स्मृति गहन अनुप्रयोगों के लिए जेवीएम अधिकतम हेप आकार बढ़ाना एक प्रॉक्सी के पीछे file_get_contents?

जावा में यूटीएफ 8 बाइट एरेज़ से स्ट्रिंग्स को कन्वर्ट करने के लिए कैसे करें

जावा में, मेरे पास स्ट्रिंग है और मैं इसे एक बाइट सरणी के रूप में सांकेतिक रूप करना चाहता हूं (यूटीएफ 8 या किसी अन्य एन्कोडिंग में)। वैकल्पिक रूप से, मेरे पास एक बाइट सरणी है (कुछ ज्ञात एन्कोडिंग में) और मैं उसे जावा स्ट्रिंग में परिवर्तित करना चाहता हूं। मैं ये रूपांतरण कैसे करूं?

Solutions Collecting From Web of "जावा में यूटीएफ 8 बाइट एरेज़ से स्ट्रिंग्स को कन्वर्ट करने के लिए कैसे करें"

स्ट्रिंग से बाइट को परिवर्तित करें []:

String s = "some text here"; byte[] b = s.getBytes("UTF-8"); 

बाइट [] से स्ट्रिंग में कनवर्ट करें:

 byte[] b = {(byte) 99, (byte)97, (byte)116}; String s = new String(b, "US-ASCII"); 

आपको निश्चित रूप से सही एन्कोडिंग नाम का उपयोग करना चाहिए। मेरे उदाहरण "यूएस-एएससीआईआई" और "यूटीएफ -8" थे, दो सबसे आम एन्कोडिंग।

यहां एक समाधान है जो हर रूपांतरण के लिए वर्णसेट लुकअप को टाल जाता है:

 import java.nio.charset.Charset; private final Charset UTF8_CHARSET = Charset.forName("UTF-8"); String decodeUTF8(byte[] bytes) { return new String(bytes, UTF8_CHARSET); } byte[] encodeUTF8(String string) { return string.getBytes(UTF8_CHARSET); } 
 String original = "hello world"; byte[] utf8Bytes = original.getBytes("UTF-8"); 

आप सीधे स्ट्रिंग (बाइट [], स्ट्रिंग) कंस्ट्रक्टर और getBytes (स्ट्रिंग) विधि के माध्यम से कनवर्ट कर सकते हैं। जावा वर्णसेट कक्षा के माध्यम से उपलब्ध चरित्र सेट को उजागर करता है। जेडीके प्रलेखन समर्थित एनकोडिंग सूचियां

समय का 90%, ऐसे रूपांतरण स्ट्रीम पर किए जाते हैं, इसलिए आप रीडर / राइटर क्लासेस का उपयोग करेंगे। आप मनमाना बाइट धाराओं पर स्ट्रिंग विधियों का उपयोग करके संवर्द्धित रूप से डीकोड नहीं करेंगे – आप अपने आप को बग के लिए खुले छोड़ देंगे जिसमें बहुबाइत वर्ण शामिल हैं।

मेरा टमाटर 7 कार्यान्वयन आईएसओ -8859-1 के रूप में तार स्वीकार कर रहा है; HTTP अनुरोध के सामग्री-प्रकार के बावजूद 'É' जैसे वर्णों को सही ढंग से व्याख्या करने की कोशिश करते समय निम्न समाधान मेरे लिए काम करता है

 byte[] b1 = szP1.getBytes("ISO-8859-1"); System.out.println(b1.toString()); String szUT8 = new String(b1, "UTF-8"); System.out.println(szUT8); 

यूएस-एएससीआईआई के रूप में स्ट्रिंग को व्याख्या करने की कोशिश करते समय, बाइट जानकारी सही ढंग से व्याख्या नहीं की गई थी।

 b1 = szP1.getBytes("US-ASCII"); System.out.println(b1.toString()); 

वैकल्पिक रूप से, अपाचे कॉमन्स से स्ट्रिंग युटिल का उपयोग किया जा सकता है

  byte[] bytes = {(byte) 1}; String convertedString = StringUtils.newStringUtf8(bytes); 

या

  String myString = "example"; byte[] convertedBytes = StringUtils.getBytesUtf8(myString); 

यदि आपके पास गैर-मानक वर्णसेट है, तो आप getBytesUnchecked () या newString () तदनुसार उपयोग कर सकते हैं।

यदि आप 7-बिट एएससीआईआई या आईएसओ -8859-1 (एक आश्चर्यजनक रूप से सामान्य स्वरूप) का उपयोग कर रहे हैं, तो आपको एक नया java.lang.String बनाने की जरूरत नहीं है। यह केवल चार में बाइट को डालने के लिए बहुत अधिक प्रदर्शनकारी है:

पूरा काम उदाहरण:

 for (byte b : new byte[] { 43, 45, (byte) 215, (byte) 247 }) { char c = (char) b; System.out.print(c); } 

अगर आप विस्तारित वर्णों जैसे Ä, Æ, Å, Ç, Ï, Ê का उपयोग नहीं कर रहे हैं और यह सुनिश्चित किया जा सकता है कि केवल ट्रांसमिलेटेड मान पहले 128 यूनिकोड वर्णों के हैं, तो यह कोड भी यूटीएफ -8 और विस्तारित एएससीआईआई के लिए काम करेगा (जैसे सीपी -1252)

एक सामान्य स्ट्रिंग संदेश के लिए बाइट्स की एक श्रृंखला को डीकोड करने के लिए मुझे अंत में यह कोड के साथ यूटीएफ -8 एन्कोडिंग के साथ काम करना पड़ा:

 /* Convert a list of UTF-8 numbers to a normal String * Usefull for decoding a jms message that is delivered as a sequence of bytes instead of plain text */ public String convertUtf8NumbersToString(String[] numbers){ int length = numbers.length; byte[] data = new byte[length]; for(int i = 0; i< length; i++){ data[i] = Byte.parseByte(numbers[i]); } return new String(data, Charset.forName("UTF-8")); } 
 //query is your json DefaultHttpClient httpClient = new DefaultHttpClient(); HttpPost postRequest = new HttpPost("http://my.site/test/v1/product/search?qy="); StringEntity input = new StringEntity(query, "UTF-8"); input.setContentType("application/json"); postRequest.setEntity(input); HttpResponse response=response = httpClient.execute(postRequest); 

मैं टिप्पणी नहीं कर सकता, लेकिन एक नया थ्रेड शुरू करना नहीं चाहता। लेकिन यह काम नहीं कर रहा है एक साधारण दौर यात्रा:

 byte[] b = new byte[]{ 0, 0, 0, -127 }; // 0x00000081 String s = new String(b,StandardCharsets.UTF_8); // UTF8 = 0x0000, 0x0000, 0x0000, 0xfffd b = s.getBytes(StandardCharsets.UTF_8); // [0, 0, 0, -17, -65, -67] 0x000000efbfbd != 0x00000081 

मुझे एन्कोडिंग से पहले और बाद में एक ही सरणी की जरूरत थी, जो कि यह नहीं है (यह पहला जवाब है)।

 Charset UTF8_CHARSET = Charset.forName("UTF-8"); String strISO = "{\"name\":\"א\"}"; System.out.println(strISO); byte[] b = strISO.getBytes(); for (byte c: b) { System.out.print("[" + c + "]"); } String str = new String(b, UTF8_CHARSET); System.out.println(str); 
 Reader reader = new BufferedReader( new InputStreamReader( new ByteArrayInputStream( string.getBytes(StandardCharsets.UTF_8)), StandardCharsets.UTF_8)); 

बहुत देर हो चुकी है लेकिन मैं सिर्फ इस मुद्दे का सामना करना पड़ा और यह मेरा तय है:

 private static String removeNonUtf8CompliantCharacters( final String inString ) { if (null == inString ) return null; byte[] byteArr = inString.getBytes(); for ( int i=0; i < byteArr.length; i++ ) { byte ch= byteArr[i]; // remove any characters outside the valid UTF-8 range as well as all control characters // except tabs and new lines if ( !( (ch > 31 && ch < 253 ) || ch == '\t' || ch == '\n' || ch == '\r') ) { byteArr[i]=' '; } } return new String( byteArr ); }