अपनी फ़ाइल को परिवर्तित करते समय, आपको यह सुनिश्चित करना चाहिए कि इसमें एक बाइट-ऑर्डर चिह्न है। भले ही मानक कहता है कि यूटीएफ -8 के लिए बाइट-ऑर्डर-मार्क की सिफारिश नहीं की गई है , लेकिन यूटीएफ -8 और एएससीआईआई के बीच बाइट-ऑर्डर मार्क के बिना वैध भ्रम हो सकता है ।
इसके अतिरिक्त, बाइट-ऑर्डर मार्क को निर्दिष्ट UTF-16BE
या निर्दिष्ट UTF-16LE
नहीं करता है , इसलिए मैं सबसे पहले परिवर्तित UTF-16
करता हूं , जो एक प्लेटफ़ॉर्म-निर्भर धीरज का उपयोग करता है। फिर, मैं file
वास्तविक एंडियननेस और उस से कन्वर्ट को निर्धारित करने के लिए उपयोग करता हूं 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