java - সফট - বাংলা জাভা




কিভাবে জাভা UTF8 বাইট অ্যারে থেকে এবং স্ট্রিং রূপান্তর করতে (9)

জাভাতে, আমার একটি স্ট্রিং আছে এবং আমি এটি একটি বাইট অ্যারে (এনটিএফ 8, বা অন্য কোন এনকোডিং) হিসাবে এনকোড করতে চাই। অন্যথায়, আমার একটি বাইট অ্যারে রয়েছে (কিছু পরিচিত এনকোডিংয়ে) এবং আমি এটি জাভা স্ট্রিং রূপান্তর করতে চাই। আমি কিভাবে এই রূপান্তর করবেন না?


আপনি যদি 7-বিট ASCII বা ISO-8859-1 (একটি বিস্ময়কর সাধারণ বিন্যাস) ব্যবহার করেন তবে আপনাকে একটি নতুন java.lang.String তৈরি করতে হবে না। এটা কেবল char মধ্যে বাইট নিক্ষেপ করার জন্য অনেক বেশি অভিনয়কারী:

সম্পূর্ণ কাজ উদাহরণ:

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

যদি আপনি Ä, Æ, Å, Ç, Ï, Ê মত বর্ধিত-অক্ষরগুলি ব্যবহার করেন না এবং নিশ্চিত হন যে শুধুমাত্র প্রেরিত মানগুলি প্রথম 128 ইউনিকোড অক্ষরের হয় তবে এই কোডটি UTF-8 এবং বর্ধিত ASCII এর জন্যও কাজ করবে (সিপি -1252 মত)।


আপনি সরাসরি স্ট্রিং (বাইট [], স্ট্রিং) কনস্ট্রাক্টর এবং getbytes (স্ট্রিং) পদ্ধতির মাধ্যমে রূপান্তর করতে পারেন। জাভা Charset ক্লাসের মাধ্যমে উপলব্ধ চরিত্র সেট প্রকাশ করে। JDK ডকুমেন্টেশন সমর্থিত এনকোডিং তালিকা

90% সময়, যেমন রূপান্তর স্ট্রিম সঞ্চালিত হয়, তাই আপনি Reader / Writer ক্লাস ব্যবহার করতে হবে। আপনি ইচ্ছাকৃতভাবে বাইট স্ট্রিমগুলিতে স্ট্রিং পদ্ধতিগুলি ব্যবহার করে ক্রমান্বয়ে ডিকোড করবেন না - আপনি মাল্টিবিট অক্ষরগুলি যুক্ত বাগগুলিতে নিজেকে ছেড়ে দিন।


আমি মন্তব্য করতে পারছি না কিন্তু একটি নতুন থ্রেড শুরু করতে চাই না। কিন্তু এই কাজ করছে না। একটি সহজ বৃত্তাকার ট্রিপ:

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

আমি b [] একই এনরে এনকোডিং এর আগে এবং পরে এটি প্রয়োজন হবে না (এটি প্রথম উত্তরটির রেফারার্স)।


একটি স্বাভাবিক স্ট্রিং মেসেজে বাইটগুলির একটি সিরিজ ডিকোড করার জন্য আমি অবশেষে এই কোডটির সাথে UTF-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"));
}

খুব দেরী কিন্তু আমি শুধু এই সমস্যা সম্মুখীন এবং এই আমার ফিক্স:

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

বিকল্প হিসাবে, Apache Commons থেকে StringUtils ব্যবহার করা যেতে পারে।

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

অথবা

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

আপনার যদি অ-মানদণ্ডের getBytesUnchecked() , তবে আপনি getBytesUnchecked() বা newString() অনুযায়ী newString() ব্যবহার করতে পারেন।


//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);

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

String original = "hello world";
byte[] utf8Bytes = original.getBytes("UTF-8");





character-encoding