ในที่ทำงานดูเหมือนว่าจะไม่มีสัปดาห์ใดผ่านไปโดยไม่มีการเชื่อมต่อที่เกี่ยวข้องกับการเข้ารหัสภัยพิบัติหรือหายนะ ปัญหามักเกิดจากโปรแกรมเมอร์ที่คิดว่าสามารถประมวลผลไฟล์ "ข้อความ" ได้อย่างน่าเชื่อถือโดยไม่ต้องระบุการเข้ารหัส แต่คุณทำไม่ได้
ดังนั้นจึงมีการตัดสินใจที่จะห้ามไม่ให้ไฟล์มีชื่อที่ลงท้ายด้วย*.txt
หรือ*.text
. แนวคิดก็คือส่วนขยายเหล่านั้นทำให้โปรแกรมเมอร์ทั่วไปเข้าใจผิดว่าเป็นความพึงพอใจที่น่าเบื่อเกี่ยวกับการเข้ารหัสและสิ่งนี้นำไปสู่การจัดการที่ไม่เหมาะสม เกือบจะดีกว่าที่จะไม่มีส่วนขยายเลยเพราะอย่างน้อยคุณก็รู้ว่าคุณไม่รู้ว่าคุณมีอะไรบ้าง
อย่างไรก็ตามเราจะไม่ไปไกลขนาดนั้น คุณจะต้องใช้ชื่อไฟล์ที่ลงท้ายด้วยการเข้ารหัสแทน ดังนั้นสำหรับไฟล์ข้อความเช่นเหล่านี้จะเป็นสิ่งที่ชอบREADME.ascii
, README.latin1
, README.utf8
ฯลฯ
สำหรับไฟล์ที่ต้องการนามสกุลเฉพาะหากสามารถระบุการเข้ารหัสภายในไฟล์ได้เช่นใน Perl หรือ Python คุณจะต้องทำเช่นนั้น สำหรับไฟล์เช่นซอร์ส Java ที่ไม่มีสิ่งอำนวยความสะดวกดังกล่าวอยู่ภายในไฟล์คุณจะต้องใส่การเข้ารหัสก่อนนามสกุลเช่นSomeClass-utf8.java
.
สำหรับเอาต์พุต UTF-8 เป็นที่ต้องการอย่างยิ่ง
แต่สำหรับการป้อนข้อมูลที่เราจำเป็นต้องคิดหาวิธีที่จะจัดการกับพันไฟล์ใน codebase *.txt
ของเราชื่อ เราต้องการเปลี่ยนชื่อทั้งหมดให้เข้ากับมาตรฐานใหม่ของเรา แต่เราไม่สามารถมองเห็นพวกมันได้ทั้งหมด ดังนั้นเราจึงต้องการไลบรารีหรือโปรแกรมที่ใช้งานได้จริง
สิ่งเหล่านี้มีหลากหลายใน ASCII, ISO-8859-1, UTF-8, Microsoft CP1252 หรือ Apple MacRoman แม้ว่าเราจะรู้ว่าเราสามารถบอกได้ว่ามีบางอย่างเป็น ASCII หรือไม่และเรามีการเปลี่ยนแปลงที่ดีในการรู้ว่าบางสิ่งอาจเป็น UTF-8 หรือไม่ แต่เราก็นิ่งงันเกี่ยวกับการเข้ารหัส 8 บิต เนื่องจากเราทำงานในสภาพแวดล้อม Unix แบบผสม (Solaris, Linux, Darwin) โดยที่เดสก์ท็อปส่วนใหญ่เป็น Macs เราจึงมีไฟล์ MacRoman ที่น่ารำคาญอยู่ไม่น้อย และโดยเฉพาะอย่างยิ่งปัญหาเหล่านี้
ในบางครั้งฉันกำลังมองหาวิธีที่จะกำหนดวิธีทางโปรแกรมโดยใช้โปรแกรม
- ASCII
- ISO-8859-1
- CP1252
- MacRoman
- UTF-8
มีไฟล์อยู่และฉันไม่พบโปรแกรมหรือไลบรารีที่สามารถแยกความแตกต่างระหว่างการเข้ารหัส 8 บิตทั้งสามได้อย่างน่าเชื่อถือ เราอาจมีไฟล์ MacRoman มากกว่าพันไฟล์เพียงอย่างเดียวดังนั้นเครื่องตรวจจับชาร์ตที่เราใช้จะต้องสามารถดมกลิ่นเหล่านั้นได้ ไม่มีสิ่งใดที่ฉันสามารถจัดการกลอุบายได้ ฉันมีความหวังอย่างมากสำหรับไลบรารีตัวตรวจจับอักขระ ICUแต่ไม่สามารถจัดการกับ MacRoman ได้ ฉันยังดูโมดูลเพื่อทำสิ่งเดียวกันทั้งใน Perl และ Python แต่มันก็เป็นเรื่องเดียวกันซ้ำแล้วซ้ำเล่า: ไม่รองรับการตรวจจับ MacRoman
ดังนั้นสิ่งที่ฉันกำลังมองหาคือไลบรารีหรือโปรแกรมที่มีอยู่ซึ่งกำหนดได้อย่างน่าเชื่อถือว่าไฟล์อยู่ในการเข้ารหัสห้ารายการใด - และควรยิ่งไปกว่านั้น โดยเฉพาะอย่างยิ่งที่จะมีการแยกแยะความแตกต่างระหว่างสาม 3 บิตการเข้ารหัสฉันได้อ้างถึงโดยเฉพาะอย่างยิ่ง MacRoman ไฟล์นี้มีข้อความภาษาอังกฤษมากกว่า 99% มีภาษาอื่น ๆ บ้าง แต่ไม่มากนัก
หากเป็นรหัสไลบรารีค่ากำหนดภาษาของเราคือให้อยู่ใน Perl, C, Java หรือ Python และเรียงตามลำดับ หากเป็นเพียงโปรแกรมเราก็ไม่สนใจว่าจะใช้ภาษาอะไรตราบเท่าที่มันมาในแหล่งข้อมูลแบบเต็มทำงานบน Unix และไม่มีภาระผูกพัน
มีใครมีปัญหาเกี่ยวกับไฟล์ข้อความแบบเดิมที่เข้ารหัสแบบสุ่มจำนวน zillion นี้หรือไม่? ถ้าเป็นเช่นนั้นคุณพยายามแก้ปัญหาอย่างไรและคุณประสบความสำเร็จเพียงใด นี่เป็นประเด็นสำคัญที่สุดของคำถามของฉัน แต่ฉันยังสนใจด้วยว่าคุณคิดว่าการสนับสนุนให้โปรแกรมเมอร์ตั้งชื่อ (หรือเปลี่ยนชื่อ) ไฟล์ของพวกเขาด้วยการเข้ารหัสไฟล์เหล่านั้นจริงจะช่วยให้เราหลีกเลี่ยงปัญหาในอนาคตได้หรือไม่ มีใครเคยพยายามบังคับใช้สิ่งนี้บนพื้นฐานของสถาบันและถ้าเป็นเช่นนั้นประสบความสำเร็จหรือไม่และเพราะเหตุใด
และใช่ฉันเข้าใจอย่างถ่องแท้ว่าเหตุใดจึงไม่สามารถรับประกันคำตอบที่แน่นอนได้จากลักษณะของปัญหา โดยเฉพาะอย่างยิ่งในกรณีที่มีไฟล์ขนาดเล็กซึ่งคุณมีข้อมูลไม่เพียงพอที่จะดำเนินการต่อ โชคดีที่ไฟล์ของเราไม่ค่อยมีขนาดเล็ก นอกเหนือจากREADME
ไฟล์แบบสุ่มส่วนใหญ่อยู่ในช่วงขนาด 50k ถึง 250k และไฟล์อื่น ๆ มีขนาดใหญ่กว่า สิ่งใดก็ตามที่มีขนาดเกินกว่า K จะรับประกันว่าเป็นภาษาอังกฤษ
โดเมนปัญหาคือการขุดข้อความทางชีวการแพทย์ดังนั้นบางครั้งเราจึงจัดการกับองค์กรที่กว้างขวางและมีขนาดใหญ่มากเช่นเดียวกับที่เก็บ Open Access ทั้งหมดของ PubMedCentral ไฟล์ที่ค่อนข้างใหญ่คือ BioThesaurus 6.0 ที่ 5.7 กิกะไบต์ ไฟล์นี้น่ารำคาญเป็นพิเศษเพราะเป็นUTF-8 เกือบทั้งหมด อย่างไรก็ตาม numbskull บางตัวไปและติดอยู่สองสามบรรทัดในนั้นซึ่งอยู่ในการเข้ารหัส 8 บิต - Microsoft CP1252 ฉันเชื่อ ต้องใช้เวลาสักพักก่อนที่คุณจะเดินทางไป :(