क्या यह पता लगाने के लिए लिनक्स कमांड है कि क्या कोई फाइल UTF-8 है?


14

Joomla .iniफ़ाइलों को UTF-8 के रूप में सहेजने की आवश्यकता होती है।

संपादन के बाद मुझे यकीन नहीं है कि फाइलें UTF-8 हैं या नहीं।

क्या कोई लिनक्स कमांड fileया कुछ कमांड्स हैं जो बताएंगे कि क्या कोई फाइल वास्तव में UTF-8 है या नहीं?


4
आप किसी फ़ाइल की एन्कोडिंग नहीं बता सकते। आप केवल एक स्मार्ट अनुमान लगा सकते हैं। आप ज्यादातर सही अनुमान लगा सकते हैं, लेकिन कभी-कभी अनुमान विफल होते हैं। fileस्मार्ट अनुमान लगाने वाले कार्यक्रम का एक उदाहरण है।
मार्को

1
@ मार्को: यह सत्यापित करना संभव है कि यह वैध यूटीएफ -8 है या नहीं। हैं कुछ एन्कोडिंग जो गलती से वैध UTF-8 के रूप में पारित कर सकते हैं, लेकिन यह लगभग कभी आईएसओ 8859-𝒏 या Windows-125𝒏 एन्कोडिंग / वर्णसेट के साथ होता है।
user1686

जवाबों:


28

आप निम्नलिखित कमांड के साथ फाइल एन्कोडिंग का निर्धारण कर सकते हैं:

file -bi filename

3
@nicolas MacOS के लिए आप कोशिश कर सकते हैं file -I filename(-I एक पूंजी है)।
रिक

5
क्या यह पूरी फाइल पढ़ता है?
बजे ctrl-alt-delor

2
@ kojow7 utf-8 का कोई हेडर नहीं है। शुद्ध ASCII (केवल 7-बिट), utf-8 से अप्रभेद्य है (जो कि इसका मतलब है, एक हेडर सभी प्रकार की समस्याओं का कारण होगा)। इसलिए यदि आपके पास एक ऐसी फ़ाइल है जो पहले MB के लिए ASCII है तो एक एकल UTF-8 वर्ण है, तो आपको पता नहीं चलेगा, जब तक कि आप पूरी फ़ाइल नहीं पढ़ते।
ctrl-alt-delor-

3
इसे उत्तर के रूप में स्वीकार नहीं किया जाना चाहिए। 'फ़ाइल' कमांड ऐसा नहीं करता है; यह फ़ाइल का केवल एक भाग पढ़ता है और एक बेहतरीन अनुमान लेने के लिए जादुई संख्याओं का उपयोग करता है। अवसर पर 'फ़ाइल' आपको गलत उत्तर दे सकती है। यह सत्यापित करने के लिए कि क्या कोई फ़ाइल ascii, iso-8859-1, utf-8 या फिर जो भी एक अच्छा समाधान है वह 'iconv' कमांड का उपयोग करने के लिए एन्कोडिंग से गुजरती है।
टिम

1
मैंने इसका परीक्षण किया है, और यह विफल हो सकता है।
टिम

9

वहाँ है, isutf8और अधिक पैकेज से आदेश का उपयोग करें ।

स्रोत: आप कैसे बता सकते हैं कि कोई फ़ाइल UTF-8 एनकोडेड है या नहीं?



@davidpostill मैं उत्सुक हूं, क्या संदर्भ में लेखक का हवाला देना बुरा है?
पाब्लो ओल्मोस डी एगुइलेरा सी।

नहीं। हालांकि, यह है अच्छा लिंक कहते हैं, जहां यह मुझे ले जाता है बनाने के लिए अभ्यास। मान लें कि मैं केवल नीला पाठ पढ़ रहा हूं। संपादन के बाद, मैं बता सकता हूं कि मुझे क्यों और कब क्लिक करना चाहिए। इससे पहले, मैं नहीं कर सका। (यह मुझे नहीं था जिसने संपादन किया था, लेकिन मैं 94% की तरह यकीन करता हूं कि यह वही है जो इसके बारे में था।)
हरमन डोपेस

अच्छा है, और अच्छी तरह से काम करता है find -type f -exec isutf8 {} +, क्योंकि यह फ़ाइल नाम भी उद्धृत करता है। (और उपयोग के साथ find ... -exec ... +भी तेज है)
टॉमस गैंडर

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
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.