วิธีค้นหาว่าเทอร์มินัลรองรับ UTF-8 หรือไม่


21

ฉันกำลังตั้งค่าโมดูล CPAN สำหรับ Perl บน CentOs 5 และหนึ่งในคำถามคือ 'เทอร์มินัลของคุณรองรับ UTF-8 หรือไม่' (Paraphrased) ฉันจะทราบได้อย่างไร

คำตอบ:


15

จริงๆแล้ววิธีทดสอบ Surefire คือการดาวน์โหลดไฟล์ข้อความและวางไว้ในเครื่องเทอร์มินัลและดูว่าทุกอย่างดูโอเคไหม

หรือถ้าคุณทำได้ให้คอมไพล์เทอร์มินัลอีกครั้งเพื่อเปิดใช้งานตัวเลือกยูนิโค้ด (สมมติว่ามันมีหนึ่งตัว)

$ TERM และ $ LANG มีลักษณะอย่างไร


$ TERM คือ "xterm" $ LANG คือ "en_US.UTF-8" (aha!) ไฟล์ข้อความแสดงได้ดีในเทอร์มินัล แต่อยากรู้อยากเห็นไม่ใช่ใน Firefox
Whatsit

ใช่ฉันพบสิ่งเดียวกันจริง ๆ : - / ... เมื่อฉันลองทำตามคำแนะนำของฉันได้รับเครื่องหมายคำถาม
theman_on_osx

$ LANG แค่บอกคุณว่าระบบของคุณจะใช้อะไรเมื่อเขียนถึง stdout / stderr ไม่ได้พูดอะไรเกี่ยวกับความสามารถของเทอร์มินัล อย่างไรก็ตามหากทุกสิ่งที่ระบบของคุณพิมพ์อักขระแปลก ๆ ดูเหมือนว่าเทอร์มินัลของคุณอาจรองรับ UTF-8
Epcylon

2
สิ่งนี้สามารถทำได้โดยอัตโนมัติด้วยการแสดงข้อความและตรวจสอบความกว้างของมัน (โดยการอ่านตำแหน่งเคอร์เซอร์ก่อนและหลัง) ฉันโพสต์หลักฐานพิสูจน์แนวคิดข้อเสนออย่างอื่น
Gilles 'หยุดชั่วร้าย'

@Gilles คำตอบของคุณง่ายมาก รักมัน!

20

พิมพ์สิ่งนี้ใน terminal ของคุณ:

echo -e '\xe2\x82\xac' 

หากเครื่องเทอร์มินัลของคุณรองรับ UTF-8 เครื่องจะส่งสัญญาณยูโร:


ไม่ใช่แบบอักษรทั้งหมดที่มีสัญลักษณ์ยูโรดังนั้นอาจแนะนำให้ใช้รหัสการทดสอบจุดอื่น
Michael Hampton

5

วิธี lamest: รันต่อไปนี้และตรวจสอบผลลัพธ์ มันจะเป็นตัวพิมพ์ใหญ่ O พร้อมกับหมวกถ้าเทอร์มินัลแสดง UTF-8

perl -le 'print "\x{c3}\x{94}"'

ฉันค่อนข้างมั่นใจว่าเทอร์มินัลของฉันรองรับ UTF-8 ในขณะนี้ (ผ่านการทดสอบที่แนะนำโดย theman_on_osx) แต่นี่เพิ่งจะแสดงผลบรรทัดว่างเปล่า เกิดอะไรขึ้น?
Whatsit

บางทีแบบอักษรที่คุณใช้ในแอพมินัลของคุณไม่รองรับ UTF-8 ตัวอักษร
ขึ้นใน

4
ฉันรู้ว่ามันสายมาก แต่ธง UTF-8 Out ทำให้การทำงานดีขึ้นperl -CO -le 'print "\x{d4}"'
แอชลีย์

3
หรือไม่มีตัวเลือก -CO ให้ Perl UTF-8 ไบต์ที่ถูกต้อง: $ perl -le 'print "\ x {c3} \ x {94}"' Ô
Tim

2

วิธีการดับเพลิงที่แน่นอนที่สุดคือการใช้คำสั่ง 'locale' มันจะพิมพ์ตัวแปรต่าง ๆ และจิปาถะทั้งหมดที่กำหนดอักขระที่ใช้ ตัวอย่างเช่นนี่คือผลลัพธ์ของฉันใน RHEL5.3 ตั้งค่าให้ใช้เฉพาะ UTF-8 ตามค่าเริ่มต้น

LANG="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_CTYPE="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_ALL=

1
สิ่งนี้ไม่ได้ทดสอบเครื่องเทอร์มินัลเฉพาะการตั้งค่าโลแคล (ซึ่งในทางปฏิบัติไม่ได้กำหนดโดยเครื่องจำลองเทอร์มินัลเสมอไปอาจไม่สะท้อนสถานะปัจจุบันของเครื่องเทอร์มินัลหรืออาจถูกแทนที่
Gilles 'หยุดความชั่วร้าย'

1

คุณสามารถใช้คำสั่งต่อไปนี้:

locale charmap

1
นี่ไม่ได้ทดสอบเทอร์มินัล มันจะแสดงเฉพาะการตั้งค่าสถานที่
grawity

1
curl http://www.cl.cam.ac.uk/~mgk25/ucs/examples/UTF-8-demo.txt

หรือ

wget -O - http://www.cl.cam.ac.uk/~mgk25/ucs/examples/UTF-8-demo.txt

นี้เห็นได้ชัดต้องหรือwgetcurl


-1
UTF=$(echo -e "\u263A")
if [[ ! "$UTF" =~ "A" ]]  ; then
 echo -n "UNICODE here!"
fi

2
นี่ไม่ได้ทดสอบเทอร์มินัล มันทดสอบเฉพาะว่าechobuiltin รองรับ\uหรือไม่
grawity
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.