קידוד מחרוזת ל- UTF-8 בג'אווה

1. סקירה כללית

כאשר מתמודדים עם חוּטב- Java, לפעמים אנחנו צריכים לקודד אותם לערכת ספציפית.

מדריך זה הוא מדריך מעשי המציג דרכים שונות לקודד א חוּט לערכת UTF-8; לצלילה מעמיקה טכנית יותר, עיין במדריך שלנו לקידוד תווים.

2. הגדרת הבעיה

כדי להציג את קידוד Java, נעבוד עם הגרמנית חוּט "Entwickeln Sie mit Vergnügen".

מחרוזת germanString = "Entwickeln Sie mit Vergnügen"; בתים [] germanBytes = germanString.getBytes (); מחרוזת asciiEncodedString = מחרוזת חדשה (germanBytes, StandardCharsets.US_ASCII); assertNotEquals (asciiEncodedString, germanString);

זֶה חוּט מקודד באמצעות US_ASCII נותן לנו את הערך "Entwickeln Sie mit Vergn? gen" בעת ההדפסה, כי זה לא מבין את הדמות הלא ASCII ü. אך כאשר אנו ממירים קידוד ASCII חוּט המשתמשת בכל התווים באנגלית ל- UTF-8, אנו מקבלים את אותה המחרוזת.

String englishString = "להתפתח בהנאה"; בתים [] englishBytes = englishString.getBytes (); מחרוזת asciiEncondedEnglishString = מחרוזת חדשה (englishBytes, StandardCharsets.US_ASCII); assertEquals (asciiEncondedEnglishString, englishString);

בואו נראה מה קורה כאשר אנו משתמשים בקידוד UTF-8.

3. קידוד עם ליבת Java

נתחיל בספריית הליבה.

חוּטהם בלתי ניתנים לשינוי ב- Java, מה שאומר שאנחנו לא יכולים לשנות a חוּט קידוד תווים. כדי להשיג את מה שאנחנו רוצים, עלינו להעתיק את הבתים של ה- חוּט ואז צור קוד חדש עם הקידוד הרצוי.

ראשית, אנו מקבלים את חוּט בתים, ולאחר מכן, ליצור חדש באמצעות הבתים שאוחזרו ובערכת התווים הרצויה:

מחרוזת rawString = "Entwickeln Sie mit Vergnügen"; בתים [] בתים = rawString.getBytes (StandardCharsets.UTF_8); מחרוזת utf8EncodedString = מחרוזת חדשה (בתים, StandardCharsets.UTF_8); assertEquals (rawString, utf8EncodedString);

4. קידוד עם Java 7 סטנדרטי ערכות

לחלופין, אנו יכולים להשתמש ב- סטנדרטי ערכות מעמד הוצג בג'אווה 7 לקודד את חוּט.

ראשית, נפענח את ה- חוּט לתוך בתים, ושנית, קידוד ה- חוּט ל- UTF-8:

מחרוזת rawString = "Entwickeln Sie mit Vergnügen"; חיץ ByteBuffer = StandardCharsets.UTF_8.encode (rawString); מחרוזת utf8EncodedString = StandardCharsets.UTF_8.decode (חיץ) .toString (); assertEquals (rawString, utf8EncodedString);

5. קידוד עם Commons-Codec

מלבד השימוש ב- Java הליבה, אנו יכולים לחלופין להשתמש ב- Apache Commons Codec כדי להשיג את אותן התוצאות.

Apache Commons Codec היא חבילה שימושית המכילה קודנים ומפענחים פשוטים לפורמטים שונים.

ראשית, נתחיל בתצורת הפרויקט. כאשר אנו משתמשים ב- Maven, עלינו להוסיף את ה- commons-codec תלות שלנו pom.xml:

 commons-codec commons-codec 1.14 

ואז, במקרה שלנו, השיעור המעניין ביותר הוא StringUtils, המספק שיטות קידוד חוּטס. באמצעות כיתה זו, מקודד UTF-8 חוּט די פשוט:

מחרוזת rawString = "Entwickeln Sie mit Vergnügen"; בתים [] בתים = StringUtils.getBytesUtf8 (rawString); מחרוזת utf8EncodedString = StringUtils.newStringUtf8 (בתים); assertEquals (rawString, utf8EncodedString);

6. מסקנה

קידוד א חוּט ל- UTF-8 זה לא קשה, אבל זה לא כל כך אינטואיטיבי. הדרכה זו מציגה שלוש דרכים לעשות זאת, באמצעות Java הליבה או שימוש ב- Apache Commons Codec.

כמו תמיד, ניתן למצוא את דגימות הקוד ב- GitHub.