มีแอปพลิเคชัน Mac OS X Command Line ที่สามารถแปลงการเข้ารหัสข้อความจากประเภทหนึ่งไปเป็นอีกประเภทหนึ่งได้หรือไม่? (โดยเฉพาะเพื่อแปลง Mac OS Roman เป็น utf8)


16

ฉันต้องการเรียกยูทิลิตีบรรทัดคำสั่งใน Mac OS X 10.8 ที่ให้ความสามารถในการแปลงไฟล์ข้อความที่บันทึกไว้ในการเข้ารหัสมาตรฐานของ Western Mac OS Roman เป็น UTF-8 ทั่วไป

ฉันจะเรียกใช้ยูทิลิตีจาก AppleScript ที่ฉันสร้างขึ้น AppleScript ช้ามากเมื่อทำงานกับบล็อคข้อความขนาดใหญ่มาก ดังนั้นฉันต้องการแยกวิเคราะห์ข้อความและแปลงข้อความโดยใช้บรรทัดคำสั่ง OS X ฉันพบเครื่องมือที่เรียกว่า "sed" ซึ่งทำให้ฉันสามารถแยกวิเคราะห์ข้อความได้ อย่างไรก็ตามยังคงมีองค์ประกอบหลายส่วนของไฟล์ที่ต้องล้างข้อมูลตัวอักษรที่ปรากฏเป็นขยะหากไฟล์นั้นถูกเปิดเป็น utf-8 (เช่น smart quote และ ellipses)

ฉันคิดว่าการบังคับให้แปลงการเข้ารหัสข้อความอาจช่วยกำจัดอักขระที่ไม่ใช่ utf8 ทั้งหมดในไฟล์ อย่างไรก็ตามฉันไม่เห็นว่า "sed" สามารถแปลงการเข้ารหัสข้อความได้อย่างง่ายดาย

ฉันจะบันทึกไฟล์ temp txt เป็น MacRoman ไปยังดิสก์โดยใช้รูทีน AppleScript ในตัวแล้ว

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

ขอบคุณสำหรับความช่วยเหลือของคุณ!


คำสั่งคือ iconv
bmargulies

@bmargulies: เมื่อฉันลอง iconv ในไฟล์ที่เข้ารหัสใน MacRoman และพยายามที่จะแปลงเป็น UTF-8 ฉันได้อักขระขยะมาแทนที่ "อักขระผิดปกติ" ดั้งเดิม ตัวอย่างเช่นจุดไข่ปลาจะแปลงเป็น "Äö√Ѭ∂‚Äö√Ѭ∂" ฉันคาดว่าจุดไข่ปลาจะเปลี่ยนเป็นช่วงเวลาอย่างสง่างามเป็นหกช่วง คำพูดที่ชาญฉลาดเหมือนกันพวกเขาแปลงเป็นข้อความแปลก ๆ เช่นกันกลายเป็น "Äö√Ñ√≤" ไวยากรณ์ที่ฉันใช้คือ: cat source.txt | iconv -f MacRoman -t UTF-8> iconv_test.txt มีไวยากรณ์ของ CLI เฉพาะที่จะบอก iconv ให้แปลงข้อความทั้งหมดเป็นการเปลี่ยนที่เหมาะสมหรือไม่

และคุณมีข้อโต้แย้งอะไรบ้าง?
bmargulies

@ Darkstar - ขั้นตอนเดียวกันของคุณใช้งานได้ดีสำหรับฉัน คุณแน่ใจหรือว่าแหล่งที่มาของคุณอยู่ใน MacRoman
Tom Gewecke

1
Excel ไม่ควรมีปัญหานี้คุณควรจะสามารถตั้งค่าการเข้ารหัสสำหรับการนำเข้าสิ่งที่คุณต้องการเช่นดูsuperuser.com/questions/280603/...
ทอม Gewecke

คำตอบ:


8

อีกวิธีในการแปลงอักขระที่ไม่ใช่ ASCII ไปเป็นชุดอักขระ ASCII คือการใช้iconv -t ASCII//TRANSLIT:

$ echo ‘’“”–—…äé | iconv -t ASCII//TRANSLIT
''""--..."a'e

ASCII//IGNOREจะลบอักขระที่ไม่ใช่ ASCII แต่คุณสามารถทำได้เช่นtr -dc '\0-\177'กัน


ไม่iconvได้รับใบอนุญาตในการแปล: เป็น→เป็น"?
แดน

@danielAzuelos ฉันไม่รู้ วิธีการที่ตัวละครจะถูกแทนที่ขึ้นอยู่กับการดำเนินการแม้ว่า: ตัวอย่าง iconv ที่มาพร้อมกับเดแทนที่มีเพียงä a
Lri

28

iconv แน่นอนว่าเป็นเครื่องมือในการเลือกที่นี่:

iconv -f MACROMAN -t UTF-8 your-roman-encoded-file.txt > utf-8-encoded-file.txt

เรียกใช้iconv --listเพื่อดูรายการการเข้ารหัสที่รองรับทั้งหมด


เมื่อฉันพบว่าไม่ใช่ MacRoman แต่เป็น "iso-8859-1" ฉันลองอีกครั้ง มันยังไม่ได้ทำในสิ่งที่ฉันต้องการให้ทำ ฉันไม่คิดว่า iconv สามารถทำสิ่งที่ฉันต้องการได้: แทนที่อักขระที่ขยายออกอย่างแฟนซีทั้งหมดด้วยระยะเวลามาตรฐานและเครื่องหมายอัญประกาศเดี่ยวและเครื่องหมายคำพูดคู่
Darkstar
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.