ตอนนี้ฉันเปลี่ยนการเข้ารหัสอักขระของ gnome-terminal เป็น "GBK" (ค่าเริ่มต้นคือ UTF-8) แต่ฉันจะรับค่า (การเข้ารหัสอักขระ) ใน Linux ได้อย่างไร
ตอนนี้ฉันเปลี่ยนการเข้ารหัสอักขระของ gnome-terminal เป็น "GBK" (ค่าเริ่มต้นคือ UTF-8) แต่ฉันจะรับค่า (การเข้ารหัสอักขระ) ใน Linux ได้อย่างไร
คำตอบ:
เทอร์มินัลใช้ตัวแปรสภาพแวดล้อมเพื่อกำหนดชุดอักขระที่จะใช้ดังนั้นคุณสามารถกำหนดได้โดยดูที่ตัวแปรเหล่านั้น:
echo $LC_CTYPE
หรือ
echo $LANG
locale
โปรแกรม (ดังที่เห็นในคำตอบอื่น ๆ ที่นี่)
locale
ตัวแปรสภาพแวดล้อมเพื่อกำหนดการเข้ารหัส อย่างไรก็ตามเทอร์มินัลสามารถให้แอปพลิเคชันที่โต้ตอบกับมันทราบการเข้ารหัสโดยการตั้งค่าlocale
ตัวแปรสภาพแวดล้อม ยกตัวอย่างเช่นใน MacOS คุณสามารถเลือกการเข้ารหัสขั้วและเลือกที่จะตั้งค่าlocale
ตัวแปรสภาพแวดล้อมที่เริ่มต้นในขั้วTerminal
> Preferences
> >Profiles
Advanced
locale
คำสั่งที่ไม่มีอาร์กิวเมนต์จะพิมพ์ค่าของตัวแปรสภาพแวดล้อมที่เกี่ยวข้องทั้งหมดยกเว้น LANGUAGE
สำหรับการเข้ารหัสปัจจุบัน:
locale charmap
สำหรับภาษาที่ใช้ได้:
locale -a
สำหรับการเข้ารหัสที่มีให้:
locale -m
ตรวจสอบการเข้ารหัสและภาษา:
$ echo $LC_CTYPE
ISO-8859-1
$ echo $LANG
pt_BR
รับทุกภาษา:
$ locale -a
เปลี่ยนเป็น pt_PT.utf8:
$ export LC_ALL=pt_PT.utf8
$ export LANG="$LC_ALL"
หากคุณมี Python:
python -c "import sys; print(sys.stdout.encoding)"
สำหรับความรู้ของฉันไม่
สิ่งบ่งชี้$LC_CTYPE
โดยรอบlocale
และสิ่งเหล่านี้อาจดูน่าดึงดูด แต่สิ่งเหล่านี้จะแยกออกจากการเข้ารหัสแอปพลิเคชันเทอร์มินัลโดยสิ้นเชิง (จริง ๆ แล้วโปรแกรมจำลอง) จะใช้เมื่อแสดงอักขระบนหน้าจอ
วิธีเดียวในการตรวจจับการเข้ารหัสอย่างแน่นอนคือการส่งออกสิ่งที่มีอยู่ในการเข้ารหัสเท่านั้นเช่นä
ถ่ายภาพหน้าจอวิเคราะห์ภาพนั้นและตรวจสอบว่าอักขระเอาต์พุตนั้นถูกต้องหรือไม่
ไม่เป็นไปไม่ได้น่าเศร้า
หากต้องการดูข้อมูลโลแคลปัจจุบันให้ใช้locale
คำสั่ง ด้านล่างนี้คือตัวอย่างของ RHEL 7.8
[usr@host ~]$ locale
LANG=en_US.UTF-8
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_PAPER="en_US.UTF-8"
LC_NAME="en_US.UTF-8"
LC_ADDRESS="en_US.UTF-8"
LC_TELEPHONE="en_US.UTF-8"
LC_MEASUREMENT="en_US.UTF-8"
LC_IDENTIFICATION="en_US.UTF-8"
LC_ALL=