בג'אווה, כאשר אנו עוסקים חוּט לפעמים זה נדרש לקודד מחרוזת בקבוצת תווים ספציפית. הַצפָּנָה היא דרך להמיר נתונים מפורמט אחד לאחר. אובייקטי מחרוזת משתמשים בקידוד UTF-16. הבעיה עם UTF-16 היא שלא ניתן לשנות אותו. יש רק דרך אחת שניתן להשתמש בה כדי לקבל קידוד שונה, כלומר מערך byte[]. אופן הקידוד אינו מתאים אם נקבל נתונים בלתי צפויים. בחלק זה נלמד כיצד לקודד מחרוזת פנימה Java .
הערה: לא ניתן לקודד מחרוזת ב-UTF-8. אז השתמש ב-ByteBuffer או התקשר למערך בו כדי לקבל בייט[].
לפני שנמשיך בסעיף זה, עלינו להבין את קידוד התווים. בואו נסתכל במהירות. בואו נבין למה אנחנו צריכים לקודד מחרוזת .
קידוד תווים היא טכניקה להמרת נתוני טקסט למספרים בינאריים. אנו יכולים להקצות ערכים מספריים ייחודיים לתווים ספציפיים ולהמיר את המספרים הללו לשפה בינארית. ניתן להמיר את המספרים הבינאריים הללו בחזרה לתווים מקוריים על סמך הערכים שלהם.
בְּעָיָה
נניח, יש לנו מחרוזת גרמנית ביי והוא נדרש לקודד אותו. שקול את קטע הקוד הבא:
String str = 'Tsch�ss'; byte[] bytesOfString = str.getBytes(); String encoded_String = new String(bytesOfString, StandardCharsets.US_ASCII); assertNotEquals(encoded_String, str);
אם נקודד את המחרוזת באמצעות US_ASCII, זה נותן את ביי מכיוון שהקידוד US_ASCII אינו מבין את התו שאינו ASCII ( u ). כאשר אנו ממירים מחרוזת מקודדת ASCII ל-UTF-8, אנו מקבלים את אותה מחרוזת.
String str = 'GoodBye'; byte[] bytesOfString = str.getBytes(); String asciiEncondedEnglishString = new String(bytesOfString, StandardCharsets.US_ASCII); assertEquals(encoded_String, str);
אם מערך byte[] מכיל טקסט שאינו Unicode, נוכל להמיר את הטקסט ל-Unicode עם חוּט בַּנַאִי. לעומת זאת, אנו יכולים גם להמיר אובייקט String למערך byte[] של תווים שאינם Unicode עם String.getBytes() שיטה. בואו נקודד את המחרוזת באמצעות ה- getBytes() שיטה.
שימוש בשיטת String.getBytes()
Java חוּט מעמד מספק את שיטת getBytes() המשמש לקידוד מחרוזת s לתוך UTF-8. השיטה ממירה את המחרוזת לרצף של בתים ומאחסנת את התוצאה במערך.
תחביר:
public byte[] getBytes(String charsetName) throws UnsupportedEncodingException
הוא מנתח את charsetName כפרמטר ומחזיר את מערך הבתים. זה זורק את UnsupportedEncodingException אם ערכת התווים הנקראת אינה נתמכת.
בואו ניצור תוכנית Java שממירה מחרוזת לקידוד UTF-8.
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+' '); } } }
תְפוּקָה:
Encoded String: 71 111 111 103 108 101 32 67 108 111 117 100
שימוש ב-StandardCharsets Class
אנו יכולים גם להשתמש במחלקה StandardCharset כדי לקודד את המחרוזת. ישנם שני שלבים לקידוד המחרוזת. ראשית, פענח את המחרוזת לבייטים ולאחר מכן קודד אותה ל-UTF-8. לדוגמה, שקול את הקוד הבא:
String str = ' Tsch�ss'; ByteBuffer buffer = StandardCharsets.UTF_8.encode(str); String encoded_String = StandardCharsets.UTF_8.decode(buffer).toString(); assertEquals(str, encoded_String);
דרך נוספת לקודד מחרוזת היא להשתמש בקידוד Base64. נדון בקידוד ופענוח Base64 בסעיף הקרוב.