ชื่อไฟล์ UTF 8 หรือไม่


15

ในระบบปฏิบัติการยูนิกซ์ที่อนุญาตให้ใช้ชื่อไฟล์ utf6 ได้หรือไม่ ถ้าเป็นเช่นนั้นฉันต้องทำอะไรเป็นพิเศษเพื่อเขียนไฟล์ลงดิสก์

ให้ฉันอธิบายสิ่งที่ฉันหวังว่าจะทำ ฉันกำลังเขียนแอปพลิเคชันที่จะถ่ายโอนไฟล์ผ่าน ftp ไปยังระบบระยะไกล แต่ชื่อไฟล์นั้นถูกตั้งค่าแบบไดนามิกเป็นผ่านชุดข้อมูล meta บางชุดซึ่งอาจเป็น utf8 ฉันสงสัยว่ามีสิ่งที่ฉันต้องทำเพื่อเขียนไฟล์ลงดิสก์ในยูนิกซ์ / ลินุกซ์หรือไม่

ทุกคนรู้ว่าจะเกิดอะไรขึ้นถ้าฉันอัพโหลดชื่อไฟล์ utf 8 ไปยังระบบไม่รองรับ utf8?

คำตอบ:


20

บน Unix / Linux ชื่อไฟล์คือลำดับของไบต์ใด ๆ ยกเว้นเครื่องหมายสแลชหรือ NUL เครื่องหมายทับแบ่งองค์ประกอบของเส้นทางและ NUL ยุติชื่อเส้นทาง

ดังนั้นคุณสามารถใช้การเข้ารหัสอะไรก็ได้ที่คุณต้องการสำหรับชื่อไฟล์ บางแอปพลิเคชั่นอาจมีปัญหากับการเข้ารหัสบางอย่างหากพวกเขาไร้เดียงสาเกี่ยวกับตัวอักษรที่อาจอยู่ในชื่อไฟล์ - ตัวอย่างเช่นเชลล์สคริปต์ที่เขียนไม่ดีมักไม่จัดการกับชื่อไฟล์ด้วยช่องว่าง

สภาพแวดล้อม Unix / Linux ที่ทันสมัยจัดการกับชื่อไฟล์ที่เข้ารหัส UTF-8 ได้ดี


12

ภายในระบบไฟล์ส่วนใหญ่เก็บไบต์: ไดรเวอร์ระบบไฟล์ไม่สนใจว่าไบต์หมายถึงอะไร ไดร์เวอร์ระบบไฟล์ทั่วไปบน Linux และยูนิกซ์ที่ทันสมัยส่วนใหญ่อนุญาตให้ไบต์ใด ๆ ที่นอกเหนือจาก/และ null null ปรากฏในชื่อไฟล์

มีระบบไฟล์ที่อาจมีข้อ จำกัด ในการเข้ารหัส - โดยปกติแล้วระบบไฟล์ที่ไม่ใช่ระบบดั้งเดิมเช่น FAT หรือ NTFS ระบบไฟล์เครือข่ายบางระบบเช่น Samba อาจแปลระหว่างการเข้ารหัสเซิร์ฟเวอร์และการเข้ารหัสไคลเอ็นต์ คุณจะต้องตรวจสอบให้แน่ใจว่าการกำหนดค่าเซิร์ฟเวอร์และไคลเอนต์นั้นสอดคล้องกัน

ตามอัตภาพในระบบส่วนใหญ่ไบต์ที่ประกอบเป็นชื่อไฟล์จะถูกตีความเป็น UTF-8 หากคุณเรียกใช้แอปพลิเคชันที่ตีความชื่อไฟล์เป็นอักขระเช่นแอปพลิเคชันที่ส่งชื่อผ่าน FTP คุณอาจต้องกำหนดค่าแอปพลิเคชันนี้เพื่อแจ้งให้ทราบว่าชื่อไฟล์ของคุณถูกเข้ารหัสใน UTF-8 การตั้งค่าสภาพแวดล้อมLC_CTYPEเป็นโลแคล UTF-8 เช่นเดียวen_US.UTF-8กับเคล็ดลับสำหรับแอปพลิเคชันบรรทัดคำสั่งจำนวนมาก

หากคุณเก็บไฟล์ไว้ในระบบที่ไม่รองรับ UTF-8 มันไม่สำคัญ ไบต์จะยังคงเหมือนเดิม คุณจะไม่สามารถแสดงอักขระที่สร้างชื่อไฟล์ แต่ถ้าคุณคัดลอกไฟล์กลับไปยังระบบที่รองรับ UTF-8 ไบต์เดียวกันเหล่านั้นจะยังคงแสดงเป็นอักขระ UTF-8

หากคุณกำลังเขียนแอปพลิเคชันของคุณเองโดยใช้ UTF-8 ภายในและหากเป็นไปได้สำหรับการจัดเก็บและการส่งเป็นความคิดที่ดี

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