ฉันพยายามแปลงจาก CP1256 เป็น ISO-8859-6 โดยใช้ Sygwin แต่ไม่สามารถแปลงได้!
และช่วย
$ iconv -f CP1256 -t ISO-8859-6 cca.txt > cca1.txt
iconv: cca.txt:791:41: cannot convert
ผลลัพธ์ของ sed -n '791p' cca.txt | od -c
คือ
ฉันพยายามแปลงจาก CP1256 เป็น ISO-8859-6 โดยใช้ Sygwin แต่ไม่สามารถแปลงได้!
และช่วย
$ iconv -f CP1256 -t ISO-8859-6 cca.txt > cca1.txt
iconv: cca.txt:791:41: cannot convert
ผลลัพธ์ของ sed -n '791p' cca.txt | od -c
คือ
คำตอบ:
หากคุณดูแผนที่อักขระสำหรับWindows-1256และISO-8859-6คุณจะเห็นว่า 1256 มีอักขระทุกจุด แต่ 8859-6 มีช่องว่างจำนวนมาก ดังนั้นเมื่อแปลงหากมีตัวละครที่ไม่ได้อยู่ในการเข้ารหัสเป้าหมายiconv
จะบ่น
iconv
คุณอาจใช้-c
ตัวเลือกและอักขระที่ไม่สามารถแปลงได้จะถูกทิ้งทั้งนี้ขึ้นอยู่กับเวอร์ชันของคุณ หรือคุณสามารถใช้บางอย่างเช่น--unicode-subst="@"
ซึ่งจะแทนที่อักขระที่ไม่ถูกต้องด้วย@
ซึ่งแปลงสภาพได้ โปรดทราบว่ามีความยืดหยุ่นค่อนข้างน้อยด้วยการทดแทนดังกล่าวรวมถึงการขยาย (เช่น"[%u]"
จะแปลงเป็นค่า Unicode ในวงเล็บ)
หาก Cygwin ไม่มีตัวเลือกเหล่านี้คุณสามารถลอง Linux หรือ Mac OS X ล่าสุด
ไม่ว่าในกรณีใดไฟล์ที่ได้จะต้องมีตัวอักษรที่อยู่ใน ISO-8859-6 เท่านั้น
sed -n '791p' cca.txt | od -c