ฉันจะแปลงไฟล์หลาย ๆ ไฟล์เป็นการเข้ารหัส UTF-8 โดยใช้เครื่องมือบรรทัดคำสั่ง * nix ได้อย่างไร [ซ้ำ]


46

ซ้ำได้:
ไฟล์ชุดแปลงสำหรับการเข้ารหัสหรือสิ้นสุดบรรทัด

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

มีเครื่องมือบรรทัดคำสั่งหรือ Perl (หรือภาษาที่คุณเลือก) หนึ่ง liners ฉันสามารถใช้เพื่อทำสิ่งนี้ en masse?

คำตอบ:


56

iconv ทำการแปลงระหว่างการเข้ารหัสตัวละครหลายตัว ดังนั้นการเพิ่ม bash magic เล็กน้อยและเราสามารถเขียน

for file in *.txt; do
    iconv -f ascii -t utf-8 "$file" -o "${file%.txt}.utf8.txt"
done

นี้จะทำงานiconv -f ascii -t utf-8เพื่อทุกไฟล์ที่ลงท้ายด้วย.txtการส่งไฟล์ recoded ไปยังไฟล์ที่มีชื่อเดียวกัน แต่สิ้นสุดในแทน.utf8.txt.txt

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


2
คุณควรอ้างอิง var $ i เพื่อจัดการชื่อไฟล์ด้วยช่องว่าง
ริชาร์ดฮอสกิ้นส์

มันจะทำสิ่งที่มันจะเพิ่ม BOM สำหรับหนึ่ง ...
jason

คุณแน่ใจหรือว่า iconv จะเพิ่ม BOM ฉันอยู่ภายใต้ความประทับใจที่ไม่ใช้ UTF-8
ริชาร์ดฮอสกิ้นส์

5
ฉันเพิ่งทดสอบสิ่งนี้ด้วย iconv (GNU libiconv 1.11) และมันไม่ได้เพิ่ม BOM ฉันเข้าใจว่า iconv จะเพิ่ม BOM หากมีอยู่ในอินพุตซึ่งจะไม่อยู่ใน ASCII BOM เป็นปัญหาและไม่จำเป็นต้องใช้กับ UTF-8
ริชาร์ดฮอสกิ้นส์

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