Java'da, bununla uğraştığımızda Sicim bazen bir dizeyi belirli bir karakter kümesinde kodlamak gerekir. Kodlama verileri bir formattan diğerine dönüştürmenin bir yoludur. Dize nesneleri UTF-16 kodlamasını kullanır. UTF-16'nın sorunu değiştirilememesidir. Farklı kodlama elde etmek için kullanılabilecek tek bir yol vardır, yani byte[] dizisi. Beklenmeyen veriler alırsak kodlama yöntemi uygun değildir. Bu bölümde öğreneceğiz bir dize nasıl kodlanır Java .
Not: Bir dizeyi UTF-8'de kodlamak mümkün değildir. Bu nedenle, bir bayt[] elde etmek için ByteBuffer'ı kullanın veya üzerinde bir dizi çağırın.
Bu bölümde ilerlemeden önce karakter kodlamasını anlamamız gerekiyor. Hadi hızlıca bir göz atalım. Haydi anlayalım neden bir dizeyi kodlamamız gerekiyor? .
Karakter kodlaması metin verilerini ikili sayılara dönüştürmek için kullanılan bir tekniktir. Belirli karakterlere benzersiz sayısal değerler atayabilir ve bu sayıları ikili dile dönüştürebiliriz. Bu ikili sayılar daha sonra değerlerine göre orijinal karakterlere dönüştürülebilir.
roma rakamları 1-100
Sorun
Diyelim ki elimizde bir Alman dizesi var Hoşçakal ve onu kodlamak gerekiyor. Aşağıdaki kod parçacığını göz önünde bulundurun:
String str = 'Tsch�ss'; byte[] bytesOfString = str.getBytes(); String encoded_String = new String(bytesOfString, StandardCharsets.US_ASCII); assertNotEquals(encoded_String, str);
Dizeyi US_ASCII kullanarak kodlarsak, şunu verir: Hoşçakal US_ASCII kodlaması ASCII olmayan karakteri anlamadığından ( ü ). ASCII kodlu bir stringi UTF-8'e çevirdiğimizde aynı stringi elde ederiz.
String str = 'GoodBye'; byte[] bytesOfString = str.getBytes(); String asciiEncondedEnglishString = new String(bytesOfString, StandardCharsets.US_ASCII); assertEquals(encoded_String, str);
Bir byte[] dizisi Unicode olmayan metin içeriyorsa, metni Unicode'a dönüştürebiliriz. Sicim yapıcı. Bunun tersine, bir String nesnesini Unicode olmayan karakterlerden oluşan bir byte[] dizisine de dönüştürebiliriz: String.getBytes() yöntem. dizesini kullanarak kodlayalım. getBytes() yöntem.
String.getBytes() Yöntemini Kullanma
Java Sicim sınıf sağlar getBytes() yöntemi bu, dizeyi UTF-8'e kodlamak için kullanılır. Yöntem, dizeyi bir bayt dizisine dönüştürür ve sonucu bir dizide saklar.
Sözdizimi:
public byte[] getBytes(String charsetName) throws UnsupportedEncodingException
CharsetName'i parametre olarak ayrıştırır ve bayt dizisini döndürür. Fırlatıyor Desteklenmeyen Kodlama İstisnası adlandırılmış karakter kümesi desteklenmiyorsa.
Bir dizeyi UTF-8 kodlamasına dönüştüren bir Java programı oluşturalım.
StringEncodingExample.java
public class StringEncodingExample { public static void main(String args[]) throws Exception { //string to encode String str = 'Google Cloud'; //invokes the getBytes() method and stores an array of bytes into array[] byte array[] = str.getBytes('UTF8'); System.out.println('Encoded String: '); //enhanced for loop that iterates over the array for (byte x: array) { //prints the sequence of bytes System.out.print(x+' '); } } }
Çıktı:
Encoded String: 71 111 111 103 108 101 32 67 108 111 117 100
StandardCharsets Sınıfını Kullanma
Dizeyi kodlamak için StandardCharset sınıfını da kullanabiliriz. Dizeyi kodlamak için iki adım vardır. Önce dizenin kodunu baytlara dönüştürün ve ardından UTF-8 olarak kodlayın. Örneğin aşağıdaki kodu göz önünde bulundurun:
java else eğer
String str = ' Tsch�ss'; ByteBuffer buffer = StandardCharsets.UTF_8.encode(str); String encoded_String = StandardCharsets.UTF_8.decode(buffer).toString(); assertEquals(str, encoded_String);
Bir dizeyi kodlamanın başka bir yolu da Base64 kodlamasını kullanmaktır. Base64 kodlama ve kod çözme işlemlerini önümüzdeki bölümde ele alacağız.