มีคำสั่ง Linux เพื่อดูว่าไฟล์เป็น UTF-8 หรือไม่?


14

.iniไฟล์Joomla จำเป็นต้องได้รับการบันทึกเป็น UTF-8

หลังจากแก้ไขฉันไม่แน่ใจว่าไฟล์เป็น UTF-8 หรือไม่

มีคำสั่ง Linux เหมือนfileหรือคำสั่งไม่กี่คำที่จะบอกว่าเป็นไฟล์ UTF-8 หรือไม่?


4
คุณไม่สามารถบอกการเข้ารหัสไฟล์ได้ คุณสามารถเดาได้อย่างชาญฉลาดเท่านั้น คุณส่วนใหญ่อาจเดาถูก แต่บางครั้งก็เดาว่าล้มเหลว fileเป็นตัวอย่างของโปรแกรมที่ทำการเดาอย่างชาญฉลาด
Marco

1
@Marco: มันเป็นไปได้ที่จะตรวจสอบว่ามันถูกต้อง UTF-8 หรือไม่ มีการเข้ารหัสบางอย่างที่สามารถส่งผ่านผิดพลาดเป็น UTF-8 ที่ถูกต้อง แต่มันแทบจะไม่เกิดขึ้นกับการเข้ารหัส / ชุดอักขระ / ISO-8859-𝒏หรือ Windows-125𝒏
user1686

คำตอบ:


28

คุณสามารถกำหนดการเข้ารหัสไฟล์ด้วยคำสั่งต่อไปนี้:

file -bi filename

3
@nicolas สำหรับ MacOS คุณสามารถลองได้file -I filename(-I คือเมืองหลวง i)
Rik

5
สิ่งนี้อ่านไฟล์ทั้งหมดหรือไม่?
ctrl-alt-delor

2
@ kojow7 utf-8 ไม่มีส่วนหัว Pure ASCII (7 บิตเท่านั้น) แยกไม่ออกจาก utf-8 (นั่นคือประเด็นส่วนหัวจะทำให้เกิดปัญหาทุกประเภท) ดังนั้นหากคุณมีไฟล์ที่เป็น ASCII สำหรับ MB แรกแล้วมีอักขระ UTF-8 เดียวคุณจะไม่รู้ถ้าคุณอ่านไฟล์ทั้งหมด
ctrl-alt-delor

3
สิ่งนี้ไม่ควรยอมรับว่าเป็นคำตอบ คำสั่ง 'ไฟล์' ไม่ทำเช่นนั้น มันอ่านเพียงบางส่วนของไฟล์และใช้หมายเลขมายากลเพื่อคาดเดาที่ดีที่สุด ในบางครั้ง 'ไฟล์' สามารถและจะให้คำตอบที่ไม่ถูกต้อง ในการตรวจสอบว่าไฟล์ผ่านการเข้ารหัสเช่น ascii, iso-8859-1, utf-8 หรืออะไรก็ตามทางออกที่ดีคือการใช้คำสั่ง 'iconv'
ทิม

1
ฉันได้ทำการทดสอบแล้วมันสามารถและล้มเหลวได้
Tim

9

นั่นคือใช้isutf8คำสั่งจากแพ็คเกจmoreutils

แหล่งที่มา: คุณจะทราบได้อย่างไรว่าไฟล์เข้ารหัส UTF-8 หรือไม่



@davidpostill ฉันอยากรู้อยากเห็นเป็นวิธีที่ไม่ดีในการอ้างอิงผู้เขียนในการอ้างอิง
Pablo Olmos de Aguilera C.

ไม่มันเป็นวิธีปฏิบัติที่ดีที่จะทำให้ลิงค์บอกว่ามันทำให้ฉันอยู่ตรงไหน สมมติว่าฉันอ่านข้อความสีฟ้าเท่านั้น หลังจากแก้ไขฉันสามารถบอกได้ว่าทำไมและเมื่อใดฉันจึงควรคลิก ก่อนหน้านี้ฉันทำไม่ได้ (ไม่ใช่ฉันที่ทำการแก้ไข แต่ฉันชอบ 94% แน่ใจว่านี่คือสิ่งที่มันเป็น)
Hermann Döppes

ดีและทำงานได้ดีfind -type f -exec isutf8 {} +เพราะมันยังอ้างอิงชื่อไฟล์ (และด้วยการใช้งานfind ... -exec ... +ก็รวดเร็ว)
Tomasz Gandor

2

ห้ามใช้fileคำสั่ง มันไม่ได้ตรวจสอบไฟล์ทั้งหมดและมันก็คาดเดาโดยทั่วไป บางครั้งมันก็ให้คำตอบที่ไม่ถูกต้อง

คุณสามารถตรวจสอบว่าไฟล์เกิดขึ้นเมื่อผ่านการเข้ารหัส UTF-8 ดังนี้:

$ iconv -f utf8 <filename> -t utf8 -o /dev/null

โค้ดส่งคืนค่าศูนย์หมายความว่าผ่าน UTF8 โค้ดส่งคืนที่ไม่เป็นศูนย์หมายความว่า UTF8 ไม่ถูกต้อง

เป็นไปไม่ได้ที่จะทราบว่าจำเป็นต้องส่งออกไฟล์โดยใช้รูปแบบการเข้ารหัสเฉพาะใด ๆ หรือไม่เนื่องจากรูปแบบการเข้ารหัสบางส่วนทับซ้อนกัน ในการทำเช่นนั้นจะต้องมีการฝังข้อมูลเมตาลงในไฟล์และจากนั้นคุณจะไว้วางใจใครก็ตามที่สร้างไฟล์นั้นแทนที่จะตรวจสอบด้วยตัวคุณเอง ... และคุณควรตรวจสอบด้วยตัวเองเสมอ


0

อีกวิธีหนึ่งคือการใช้recodeซึ่งจะออกโดยมีข้อผิดพลาดหากพยายามถอดรหัส UTF-8 และพบอักขระที่ไม่ถูกต้อง

if recode utf8/..UCS < "$FILE" >/dev/null 2>&1; then
    echo "Valid utf8 : $FILE"
else
    echo "NOT valid utf8: $FILE"
fi
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.