การนำมาตรฐาน IDNA2008 ใช้งาน และการสำรวจไลบรารีที่รองรับในภาษาโปรแกรมต่าง ๆ
IDNA2008 (Internationalized Domain Names in Applications) เป็นมาตรฐานที่พัฒนาต่อยอดจากมาตรฐานเดิม IDNA2003 สำหรับการจัดการชื่อโดเมนสากล (Internationalized Domain Names: IDNs) โดยมาตรฐาน IDNA2008 ได้รับการปรับปรุงให้รองรับการทำงานด้านความเป็นสากล (Internationalization) ได้ดียิ่งขึ้น และถูกนำไปใช้อย่างแพร่หลายในแอปพลิเคชันสมัยใหม่
ปัจจุบันมีไลบรารีที่รองรับมาตรฐาน IDNA2008 ทั้งแบบที่มาพร้อมกับภาษาโปรแกรม (Built-in Libraries) และไลบรารีจากภายนอก (Third-party Libraries) ให้เลือกใช้งานในภาษาโปรแกรมหลากหลายภาษา ไลบรารีเหล่านี้มีฟังก์ชันและเมธอดที่ช่วยสนับสนุนการทำงานตามโปรโตคอล IDNA2008 สำหรับการจัดการชื่อโดเมนสากล (IDNs)
ในส่วนนี้จะนำเสนอไลบรารีที่รองรับมาตรฐาน IDNA2008 ซึ่งมีการใช้งานอย่างแพร่หลายในภาษาโปรแกรม Python และ Java พร้อมทั้งภาพรวมทั่วไปของวิธีการใช้งานไลบรารีเหล่านั้น
- Python:
- idna library: ในการใช้งานไลบรารีนี้ ผู้ใช้จำเป็นต้องติดตั้งผ่านตัวจัดการแพ็กเกจ (Package Manager) ที่เหมาะสมกับระบบปฏิบัติการที่ใช้งานอยู่ เมื่อทำการติดตั้งเรียบร้อยแล้ว สามารถนำเข้าโมดูล idna และเรียกใช้ฟังก์ชันต่าง ๆ ของไลบรารีได้
ตัวอย่างที่ 1: การใช้งานไลบรารี IDNA2008 ในภาษา Python:
import idna
# Encode Unicode domain name to Punycode
punycode_domain = idna.encode(‘คน.ไทย’)
print(punycode_domain)
# Decode Punycode domain name to Unicode
unicode_domain = idna.decode(punycode_domain)
print(unicode_domain)
#First output: ‘xn--42c6b.xn--o3cw4h’
#Second output คน.ไทย
- Java:
- เนื่องจากคลาส java.net.IDN ไม่รองรับมาตรฐาน IDNA2008 การใช้งานไลบรารีจากภายนอก (Third-party Libraries) จึงมีความจำเป็นสำหรับการเข้ารหัสและถอดรหัสชื่อโดเมนสากล (IDNs) ในภาษา Java
- สามารถรองรับการทำงานตามมาตรฐาน IDNA2008 ในภาษา Java ได้โดยการใช้ไลบรารีจากภายนอก (Third-party Libraries) เช่น ICU4J:
- ดาวน์โหลดและนำเข้าไลบรารี ICU4J: ให้ดาวน์โหลดไฟล์ JAR ของไลบรารี ICU4J จากเว็บไซต์อย่างเป็นทางการของโครงการ ICU หรือจากแหล่งที่เชื่อถือได้ จากนั้นเพิ่มไฟล์ JAR ดังกล่าวลงใน classpath ของโปรเจกต์ภาษา Java ของคุณ
ตัวอย่างที่ 2: การใช้งานไลบรารี IDNA2008 ในภาษา Java: การเข้ารหัส (Encoding):
//Encoding IDN to Punycode.
import com.ibm.icu.text.IDNA;
import com.ibm.icu.text.IDNA.Info;
public class IDNAExample {
public static void main(String[] args) {
String unicodeDomainName = “คน.ไทย'”;
// Create an IDNA converter
IDNA idna = IDNA.getUTS46Instance(IDNA.DEFAULT);
try {
// Convert Unicode to ASCII (Punycode)
StringBuilder punycodeDomainNameBuilder = new StringBuilder();
idna.nameToASCII(unicodeDomainName, punycodeDomainNameBuilder, new Info());
String punycodeDomainName = punycodeDomainNameBuilder.toString();
System.out.println(“Punycode: ” + punycodeDomainName);
} catch (Exception e) {
e.printStackTrace();
}
}
}
//Output: b’xn--42c6b.xn--o3cw4h‘
ตัวอย่างที่ 3: การใช้งานไลบรารี IDNA2008 ในภาษา Java: การถอดรหัส (Decoding)
import com.ibm.icu.text.IDNA;
import com.ibm.icu.text.IDNA.Info;
public class IDNAExampleDecoding {
public static void main(String[] args) {
String punycodeDomainName = “xn--42c6b.xn--o3cw4h“;
// Create an IDNA converter
IDNA idna = IDNA.getUTS46Instance(IDNA.DEFAULT);
try {
// Convert Punycode to Unicode
StringBuilder unicodeDomainNameBuilder = new StringBuilder();
idna.nameToUnicode(punycodeDomainName, unicodeDomainNameBuilder, new Info());
String unicodeDomainName = unicodeDomainNameBuilder.toString();
System.out.println(“Unicode: ” + unicodeDomainName);
} catch (Exception e) {
e.printStackTrace();
}
}
}
//Output: ‘คน.ไทย’
