แก้ไขการเข้ารหัส umlauts ภาษาเยอรมันในไดเรกทอรีและชื่อไฟล์ (ü = u╠êเป็นต้น)


13

ฉันมีไฟล์ซิปหลายไฟล์ที่มีข้อผิดพลาดในการเข้ารหัสสำหรับ umlauts ภาษาเยอรมัน (äüöÄÜÖß) พวกเขาจะปรากฏใน filename.zip เช่นเดียวกับในไดเรกทอรีและไฟล์รวมดังนี้:

  • Fünf = Fu╠ênf
  • Räuber = Ra╠êuber
  • Überfall = U╠êberfall

และอื่น ๆ ปกติฉันจะใช้ Linux แต่เนื่องจากปัญหานี้ฉันจึงลองใช้ Windows7 VM แต่จะส่งผลให้เกิดการเข้ารหัสแบบเดียวกัน บน Linux ฉันเล่นรอบ ๆ ด้วย convmv และ detox แต่ไม่ประสบความสำเร็จ

เมื่อฉันใช้

  • convmv -f iso-8859-1 -t utf8 --replace --notest -r *

ฉันได้รับ "ข้ามไปแล้ว UTF-8"

มีความคิดเห็นเกี่ยวกับเรื่องนี้ไหม?


คุณใช้ระบบโบราณอะไร การแจกแจง Linux ปัจจุบันทั้งหมดใช้ UTF-8 ทันที
BatchyX

นี่อาจเป็นปัญหาระบบไฟล์หรือไม่ บางทีมันไม่ได้ติดตั้งใน UTF?
terdon

ฉันใช้ Linux Mint 13 (อ้างอิงจาก Ubuntu 12.04 LTS พร้อมเคอร์เนล 3.2.0-23) ดังนั้นนี่จึงห่างไกลจากของโบราณ และตามที่ฉันเขียนไปแล้วฉันก็ลองใช้ไฟล์นั้นบน Windows 7 VM แต่แน่นอนว่าฉันไม่รู้ว่าใครเป็นผู้สร้างไฟล์ zip ที่ใช้
ไซเดอร์

1
การเข้ารหัสนี้ดูเหมือนว่าการเข้ารหัส DOS บางประเภท โดยปกติถ้าฉันเห็นปัญหาเกี่ยวกับการเข้ารหัส UTF8 umlauts ภาษาเยอรมันจะดูเหมือนä = äหรือÜ = Ãœ
ไซเดอร์

@cider ลองfind -type f -print0 |xargs -r -n1 -0 convmv -f WINDOWS-1252 -t UTF-8 --notest นี่ค้นหาไฟล์จาก dir ปัจจุบันไปข้างหน้าและรัน convmv แยกกันในแต่ละไฟล์ ชื่อไฟล์ถูก encoed เป็นรายการ nullterminated
Manwe

คำตอบ:


2

สาเหตุที่คุณได้รับคำเตือน "เรียบร้อยแล้ว UTF-8" คือสตริงเหล่านั้นมีอยู่แล้วใน UTF-8 อักขระ "ü" ถูกเข้ารหัสสไตล์ OSX เป็น 'u' ตามด้วยสองไบต์ "\ xCC" และ "\ x88" สองไบต์เหล่านี้ประกอบกันเป็นตัวแทน UTF-8 ของ \ u0308, ไดอะเรซิสที่รวมกัน

หากคุณดูรายการรหัสหน้า 437 ที่นี่คุณจะเห็นอักขระ \ xCC เป็น "╠" และอักขระ \ x88 เป็น "ê"

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

หลักฐานที่รวดเร็วหากคุณอ่าน ruby ​​แสดงว่าเป็นไปตามที่คาดไว้ในเทอร์มินัล UTF-8 ของฉัน:

$ ruby -e 'puts "u\xCC\x88"' | iconv -f cp437 -t utf-8
ü
$ ruby -e 'puts "u\xCC\x88"'
ü

0

ฉันเดาว่าเป็นระบบไฟล์ที่คุณพยายามขยายหรือจัดการไฟล์ FAT32 จะไม่ชอบสัญลักษณ์ของคุณ ลองคัดลอกไฟล์เหล่านี้ออกจากแฟลชไดรฟ์ (หรือมีคุณอยู่) จากนั้นคลายไฟล์ zip เพื่อดูประเภทของชื่อไฟล์ที่สร้าง

ทั้ง NTFS (Windows) และ Ext4 (Mint) ไม่ควรมีปัญหากับการเข้ารหัสชื่อ

การเข้ารหัสชื่อไฟล์ zip ด้วยตัวเองบนระบบ FAT32 มักจะไม่เปลี่ยนแปลงหรือได้รับการแก้ไขเมื่อคุณคัดลอกไปยังระบบไฟล์ supporing ที่เหมาะสม แต่ไดเรกทอรีย่อยเมื่อแตกไฟล์ควรปรับ


0

โปรดทราบว่าการเข้ารหัสตัวอักษรเป็นส่วนของนรกเอง ในโลกของ Windows ยังคงมีความเป็นคู่ที่น่ารังเกียจระหว่าง UTF-8 และ M $ ที่เล่นโง่มาเป็นเวลานานและยืนยันใน ISO-8859 (เดาว่าใครเป็นใคร) ดังที่ได้กล่าวมาแล้วมันมีบางอย่างที่เกี่ยวข้องกับระบบไฟล์ วิธีแก้ปัญหาของฉันไม่ใช่เทคนิค แต่เป็นวิธีที่ใช้ได้ผลกับฉันมาหลายปีแล้ว:

คำแนะนำส่วนตัวของฉันสำหรับชื่อไฟล์จะเหมือนกันเสมอ: เพียงแค่ใช้ตัวอักษรผสมตัวเลขประ (-) และขีดล่าง (_) เขียน umlaute เป็น ae, ue และ oe อย่าใช้ช่องว่างและอักขระพิเศษอื่น ๆ ในตอนแรกมันไม่สะดวกเล็กน้อย แต่มันจะช่วยให้คุณเจ็บปวดมากในสถานที่ที่ไม่คาดคิด

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


ฉันป่วยและเบื่อกับการเข้ารหัสปัญหาในชื่อไฟล์เมื่อฉันพยายาม (และล้มเหลว) ในการซิงค์ไฟล์ระหว่าง Mac, Windows และ Linux (ผ่าน Syncthing) ฉันจะปรับคำแนะนำของคุณอย่างไรก็ตามในภาษาตุรกีมีç, ş, ı, ğ, ü, ö, ไม่สะดวกในการเขียนด้วยตัวอักษรและตัวเลข ฉันต้องการละเว้นจากการใช้ที่เก็บข้อมูลบนคลาวด์ แต่ปัญหานี้บังคับให้ฉันทำเช่นนั้น
Teo
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.