अपनी फ़ाइल को परिवर्तित करते समय, आपको यह सुनिश्चित करना चाहिए कि इसमें एक बाइट-ऑर्डर चिह्न है। भले ही मानक कहता है कि यूटीएफ -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