Skip to main content

A.18. Python Unicode String

Python mengadopsi aturan standar Unicode dalam pengelolaan karakter pada string. Benefitnya Python mendukung dan mengenali berbagai macam jenis karakter, termasuk diantaranya adalah huruf Arab, Jepang, emoji, symbol, dan banyak jenis karakter lainnya.

Unicode sendiri adalah suatu aturan standar untuk encoding text yang di-maintain oleh Unicode Consortium. Standarisasi ini diciptakan untuk mendukung semua jenis penulisan yang ada di bumi.

Pada chapter ini kita akan membahas tentang bagaimana implementasi Unicode di Python.

A.18.1. Pengenalan Unicode String​

Dalam dunia per-Unicode-an, ada yang disebut dengan code point yaitu suatu angka numerik (bisa desimal maupun hexadecimal) yang merepresentasikan karakter tertentu. Jadi bisa diibaratkan identifier dari suatu karakter. Semua karakter ada code point-nya, termasuk huruf A, B, C, maupun karakter lainnya (angka, tulisan romawi, symbol, dll).

Cara penulisan karakter unicode sendiri bisa dengan langsung menuliskan karakternya, atau bisa juga dengan menuliskan code point dalam notasi tertentu.

  • Contoh penulisan text dengan langsung menuliskan karakternya:

    message = "μ•ˆλ…•ν•˜μ„Έμš” πŸ˜€"
    print(message)
    # output ➜ μ•ˆλ…•ν•˜μ„Έμš” πŸ˜€
  • Menggunakan notasi special character \uXXXX, dimana XXXX diisi dengan code point dalam encoding 16-bit.

    message = "\uC548\uB155\uD558\uC138\uC694"
    print(message)
    # output ➜ μ•ˆλ…•ν•˜μ„Έμš”
    • Code point 16-bit C548 merepresentasikan karakter μ•ˆ
    • Code point 16-bit B155 merepresentasikan karakter λ…•
    • Code point 16-bit D558 merepresentasikan karakter ν•˜
    • Code point 16-bit C548 merepresentasikan karakter μ„Έ
    • Code point 16-bit C694 merepresentasikan karakter μš”

    Untuk memunculkan emoji menggunakan kode encoding 16-bit butuh tambahan effort karena code point emoji tidak cukup jika direpresentasikan oleh code point yang lebarnya hanya 16-bit.

  • Menggunakan notasi special character \UXXXXXXXX, dimana XXXXXXXX diisi code point dalam encoding 32-bit.

    message = "\U0000C548\U0000B155\U0000D558\U0000C138\U0000C694 \U0001F600"
    print(message)
    # output ➜ μ•ˆλ…•ν•˜μ„Έμš” πŸ˜€
    • Code point 32-bit 0000C548 merepresentasikan karakter μ•ˆ
    • Code point 32-bit 0000B155 merepresentasikan karakter λ…•
    • Code point 32-bit 0000D558 merepresentasikan karakter ν•˜
    • Code point 32-bit 0000C138 merepresentasikan karakter μ„Έ
    • Code point 32-bit 0000C694 merepresentasikan karakter μš”
    • Code point 32-bit 0001F600 merepresentasikan emoji πŸ˜€
  • Atau menggunakan notasi special character \N{NAME}, dimana NAME diisi dengan nama karakter unicode dalam huruf besar.

    message = "\N{HANGUL SYLLABLE AN}\N{HANGUL SYLLABLE NYEONG} \N{GRINNING FACE}"
    print(message)
    # output ➜ μ•ˆλ…• πŸ˜€
    • Nama karakter Unicode HANGUL SYLLABLE AN merepresentasikan karakter μ•ˆ
    • Nama karakter Unicode HANGUL SYLLABLE NYEONG merepresentasikan karakter λ…•
    • Nama karakter Unicode GRINNING FACE merepresentasikan emoji πŸ˜€

Salah satu website yang berguna untuk mencari informasi nama dan code point karakter Unicode: https://www.compart.com/en/unicode/

A.18.2. Fungsi utilitas pada Unicode​

β—‰ Fungsi ord()​

Fungsi ord() digunakan untuk mengambil nilai code point dari suatu karakter. Nilai baliknya adalah numerik berbasis desimal.

text = "N"
codePoint = ord(text)
print(f'code point of {text} in decimal: {codePoint}')
# output ➜ code point of N in decimal: 78

text = "μ•ˆ"
codePoint = ord(text)
print(f'code point of {text} in decimal: {codePoint}')
# output ➜ code point of μ•ˆ in decimal: 50504

Untuk menampilkan code point dalam notasi heksadesimal, cukup bungkus menggunakan fungsi hex().

text = "μ•ˆ"
codePoint = ord(text)

print(f'code point of {text} in decimal: {codePoint}')
# output ➜ code point of μ•ˆ in decimal: 50504

print(f'code point of {text} in hex: {hex(codePoint)}')
# output ➜ code point of μ•ˆ in hex: 0xc548

Bisa dilihat dari program di atas, unicode code point dari karakter μ•ˆ dalam bentuk heksadesimal adalah c548. Jika dicek pada praktek sebelumnya, kode heksadesimal yang sama kita gunakan juga dalam penulisan karakter unicode menggunakan notasi \uXXXX (yaitu \uc548).

β—‰ Fungsi chr()​

Fungsi chr() adalah kebalikan dari fungsi ord(), kegunaannya adalah untuk menampilkan string sesuai code point.

Pada contoh dibawah ini fungsi chr() digunakan untuk memunculkan karakter dengan code point desimal 50504 dan juga heksadesimal C548, yang keduanya adalah merepresentasikan karakter yang sama, yaitu μ•ˆ.

codePoint = chr(50504)
print(codePoint)
# output ➜ μ•ˆ

codePoint = chr(0xC548)
print(codePoint)
# output ➜ μ•ˆ