Apabila menulis program Golang, anda mungkin perlu membenamkan beberapa aksara bukan ASCII, seperti teks Cina, ungkapan Emoji, dsb. Walau bagaimanapun, kadangkala, aksara terbenam akan kelihatan bercelaru, menjejaskan kesan larian dan kebolehbacaan program. Yang berikut memperkenalkan beberapa punca dan penyelesaian biasa bagi aksara golang yang tertanam.
1. Pengekodan rentetan Golang
Rentetan dalam Golang ialah urutan yang terdiri daripada aksara Unicode Setiap aksara menduduki 1 atau 2 bait, bergantung pada kaedah pengekodannya. Golang menyokong tiga kaedah pengekodan aksara berikut:
UTF-8 ialah pengekodan Unikod panjang boleh ubah, setiap aksara menduduki 1-4 bait, panjang khusus bergantung pada nilai pengekodan Unicode aksara. Dalam Golang, rentetan dikodkan dalam UTF-8 secara lalai. Contohnya:
s := "你好"
Rentetan di atas menggunakan pengekodan UTF-8.
UTF-16 ialah pengekodan Unikod panjang tetap yang menggunakan 2 bait setiap aksara. Di Golang, anda boleh menggunakan jenis rune untuk mewakili aksara yang dikodkan UTF-16. Contohnya:
var r rune = '好'
Kod di atas mewakili pengekodan UTF-16 bagi aksara 'baik', iaitu integer jenis uint16.
UTF-32 ialah pengekodan Unikod panjang tetap yang menggunakan 4 bait setiap aksara. Di Golang, anda boleh menggunakan jenis int32 untuk mewakili aksara yang dikodkan UTF-32. Contohnya:
var c int32 = '?'
Kod di atas mewakili pengekodan UTF-32 bagi ungkapan Emoji ?, iaitu integer jenis uint32.
2. Kaedah membenamkan aksara bukan ASCII
Di Golang, terdapat empat kaedah berikut untuk membenamkan aksara bukan ASCII:
Gunakan aksara secara langsung untuk mewakili aksara bukan ASCII dalam rentetan. Contohnya:
s := "你好?"
Kod di atas mengandungi kedua-dua aksara Cina dan ungkapan Emoji.
Gunakan aksara melarikan diri untuk mewakili aksara bukan ASCII. Contohnya:
s := "你好U0001F60A"
Dalam kod di atas, U diikuti dengan pengekodan UTF-32 bagi aksara, yang mewakili ungkapan Emoji.
Gunakan nilai yang dikodkan Unikod untuk mewakili aksara bukan ASCII. Contohnya:
s := "u4f60u597dU0001F60A"
Dalam kod di atas, u diikuti oleh pengekodan UTF-16 aksara dan U diikuti oleh pengekodan UTF-32.
Pengekodan Base64 bukan aksara ASCII, dan kemudian benamkan rentetan yang dikodkan dalam program. Contohnya:
s := "5L2g5aW98J+YqA=="
Rentetan di atas ialah hasil pengekodan base64 bagi "Hello?"
3. Punca dan penyelesaian untuk aksara bercelaru terbenam Golang
Jika kaedah pengekodan yang salah digunakan dalam program , akan menyebabkan rentetan mengandungi aksara bercelaru. Contohnya, apabila menggunakan nilai yang dikodkan Unicode, jika kaedah pengekodan yang salah digunakan, aksara yang bercelaru akan muncul. Cara yang betul untuk menggunakannya ialah menggunakan pengekodan aksara yang betul untuk melarikan diri. Contohnya:
s := "u4f60u597dud83dude0a"
Dalam kod di atas, u diikuti dengan pengekodan UTF-16 dan ud83dude0a ialah perwakilan yang betul bagi pengekodan UTF-16 untuk ungkapan Emoji.
Sesetengah editor akan menukar pengekodan fail semasa menyimpan fail, seperti menukar pengekodan UTF-8 kepada ANSI. Ini akan mengakibatkan rentetan bercelaru dalam program. Oleh itu, anda harus menggunakan editor yang menyokong pengekodan UTF-8 untuk menyimpan fail dan memastikan pengekodan fail selaras dengan pengekodan yang digunakan dalam atur cara.
Dalam sesetengah kes, pembolehubah persekitaran sistem mungkin menjejaskan pengekodan rentetan dalam atur cara. Anda perlu menyemak sama ada pembolehubah persekitaran sistem ditetapkan dengan betul kepada kaedah pengekodan.
Ringkasnya, apabila membenamkan aksara bukan ASCII, anda perlu memilih kaedah pengekodan dengan betul dan memastikan kaedah pengekodan fail adalah konsisten dengan kaedah pengekodan dalam program. Gunakan kaedah melarikan diri yang betul untuk mengelakkan aksara yang bercelaru.
Atas ialah kandungan terperinci golang tertanam kod kacau. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!