การเข้ารหัสชื่อไฟล์ถูกกำหนดโดยระบบไฟล์ NTFS ใช้ UTF-16 แม้ว่ามันจะไม่สำคัญ
เมื่อคุณdir
อยู่ในบรรทัดคำสั่งมันไม่เพียง แต่คัดลอกไบต์สุ่มสี่สุ่มห้า ก่อนอื่นต้องเรียกใช้ฟังก์ชัน OS ที่เหมาะสมเพื่อแสดงรายการไดเรกทอรีจากนั้นพิมพ์รายละเอียดไฟล์ที่ได้รับไปยังคอนโซล
เมื่อcmd
เรียกใช้ฟังก์ชั่นระบบเพื่อดึงข้อมูลรายชื่อไดเรกทอรีมันคาดว่ามันจะถูกส่งกลับในการเข้ารหัสที่ต้องการ (ซึ่งไม่จำเป็นต้องเข้ารหัสที่คุณเลือก - เพิ่มเติมในภายหลัง) ไม่สนใจว่าจะใช้การเข้ารหัสภายในแบบใดเนื่องจาก FS จะให้เลเยอร์นามธรรมเพิ่มเติมเพื่อทำให้สิ่งต่าง ๆ ง่ายขึ้น FS สามารถใช้การเข้ารหัสที่คุณสามารถจินตนาการได้ แต่ตราบใดที่ OS รองรับมันcmd
จะได้รับชื่อไฟล์ในการเข้ารหัสที่ต้องการไม่ใช่การเข้ารหัสของ FS
"การเข้ารหัสที่ต้องการ" ที่ฉันพูดถึงคือ ANSI ที่ใช้เพจรหัสหรือ Unicode ANSI ถูกใช้เป็นการเข้ารหัสเริ่มต้นก่อน Windows 2000 Windows 2000 และรุ่นที่ใหม่กว่าใช้ Unicode เป็นค่าเริ่มต้น แต่ยังคงสามารถเรียกใช้โปรแกรม ANSI ได้
สำหรับโปรแกรม Unicode โค้ดเพจจะถูกละเว้นอย่างสมบูรณ์และchcp
ไม่มีผลกระทบ มันใช้เฉพาะกับโปรแกรม ANSI รุ่นเก่าซึ่งขึ้นอยู่กับเพจรหัสที่ถูกตั้งค่า มันไม่สำคัญอีกต่อไปสำหรับ Unicode เพราะมันถูกกำหนดไว้อย่างดีและสนับสนุนทุกสิ่งที่โปรแกรมที่เหมาะสมสามารถแสดงผลได้
cmd
รองรับ Unicode ดังนั้นจึงจะได้รับชื่อไฟล์เป็น Unicode อยู่แล้ว
ดังที่คุณทราบแล้วผู้กระทำผิดเป็นแบบอักษรเริ่มต้น ปัญหานี้ถูกกล่าวถึงในหน้า Technet บน chcp :
เฉพาะหน้ารหัสผู้ผลิตอุปกรณ์ดั้งเดิม (OEM) ที่ติดตั้งด้วย Windows XP ปรากฏขึ้นอย่างถูกต้องในหน้าต่างพรอมต์คำสั่งที่ใช้แบบอักษร Raster หน้ารหัสอื่น ๆ ปรากฏอย่างถูกต้องในโหมดเต็มหน้าจอหรือหน้าต่างพรอมต์คำสั่งที่ใช้แบบอักษร TrueType