เปลี่ยนการเข้ารหัสไฟล์ txt


16

เมื่อฉันเขียน:

file file1.txt 

ฉันมีเอาท์พุทนี้: ข้อความ Unicode UTF-16 แบบ Little-endian พร้อมตัวต่อสาย CR

ถ้าฉันจะเขียน:

file file2.txt 

ฉันมี: ข้อความ ASCII

file2.txt ถูกสร้างโดยการสร้าง:

echo $var > "file2.txt"

ฉันต้องการ file2.txt มีการเข้ารหัสแบบเดียวกันกับ file1.txt ฉันจะทำสิ่งนั้นได้อย่างไร

คำตอบ:


25

คุณสามารถใช้iconvเพื่อแปลงการเข้ารหัสไฟล์:

iconv -f ascii -t utf16 file2.txt > another.txt

another.txt ควรมีการเข้ารหัสที่ต้องการ

คุณสามารถลองสิ่งนี้:

echo $var | iconv -f ascii -t utf16 > "file2.txt"


0

เมื่อแปลงไฟล์ของคุณคุณควรตรวจสอบให้แน่ใจว่ามีเครื่องหมายคำสั่งซื้อแบบไบต์ แม้ว่ามาตรฐานกล่าวว่าสั่งไบต์เครื่องหมายไม่แนะนำสำหรับ UTF-8 , อาจมีความสับสนที่ถูกต้องระหว่าง UTF-8 และ ASCII โดยไม่ต้องมีเครื่องหมายสั่งไบต์

นอกจากนี้การระบุUTF-16BEหรือUTF-16LE ไม่เติมเครื่องหมายคำสั่งซื้อแบบไบต์ดังนั้นฉันจึงแปลงเป็นครั้งแรกUTF-16ซึ่งใช้ endianness ที่ขึ้นอยู่กับแพลตฟอร์ม จากนั้นผมใช้fileในการกำหนด endianness UTF-16LEเกิดขึ้นจริงและแปลงจากนั้นไปยัง

ในที่สุดเมื่อคุณสร้างไฟล์โดยใช้bashไฟล์ที่ได้รับbashของlocale charmapการเข้ารหัสเพื่อให้เป็นสิ่งที่คุณต้องทำแผนที่จาก

(ฉันเป็นตัวพิมพ์ใหญ่การเข้ารหัสทั้งหมดของฉันเพราะเมื่อคุณแสดงรายการiconvการเข้ารหัสที่สนับสนุนทั้งหมดด้วยiconv -lพวกเขาจะเป็นตัวพิมพ์ใหญ่ทั้งหมด)

BASH_ENCODING="$( locale charmap | tr [:lower:] [:upper:] )"
echo $var | iconv -f "$BASH_ENCODING" -t UTF-16 > UTF-16-UNKNOWN-ENDIANNESS-FILE
FILE_ENCODING="$( file --brief --mime-encoding UTF-16-UNKNOWN-ENDIANNESS-FILE )"
iconv -f "$FILE_ENCODING" -t UTF-16LE UTF-16-UNKNOWN-ENDIANNESS-FILE > file2.txt

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