โมดูลการเรียนรู้แบบไมโครด้าน Universal Acceptance โมดูลการเรียนรู้ที่ 6: การพัฒนาโปรแกรมที่รองรับชื่อโดเมนสากล ภายใต้แนวคิด Universal Acceptance (UA)

การนำมาตรฐาน 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: ‘คน.ไทย’