UTC-8 फ़ाइल को ASCII में परिवर्तित करना (सर्वोत्तम प्रयास)


23

मेरे पास UTF-8 में एक फाइल है जिसमें कई भाषाओं के टेक्स्ट हैं। बहुत सारे लोग लोगों के नाम हैं। मुझे इसे ASCII में बदलने की आवश्यकता है और मुझे यथासंभव अच्छे परिणाम देखने की आवश्यकता है।

एक व्यापक एन्कोडिंग से एक संकीर्ण एक में परिवर्तित करने के लिए कई तरीके हैं। सबसे सरल परिवर्तन कुछ गैर-ASCII वर्णों को कुछ प्लेसहोल्डर के साथ बदलना होगा, जैसे '_'। अगर मुझे पता है कि फ़ाइल जिस भाषा में लिखी गई है, उसमें अतिरिक्त संभावनाएँ हैं, जैसे कि रोमानीकरण।

यूनिक्स पर उपलब्ध यूनिक्स टूल या प्रोग्रामिंग लैंग्वेज लाइब्रेरी मुझे UTF-8 से ASCII में एक सभ्य (सर्वोत्तम-प्रयास) रूपांतरण दे सकती है।

अधिकांश पाठ यूरोपीय, लैटिन प्रकार आधारित भाषाओं में है।


1
क्या आप जानते हैं कि कौन सी भाषा कहाँ से शुरू होती है? उदाहरण के लिए एक अंतर कैसे एक umlaut की अनुपलब्धता को संभालने के लिए (ö के रूप में)। जर्मन में आप हमेशा लिख सकते हैं "ँ", लेकिन जैसे डच में उमलाउट की अनुपलब्धता बेहतर हो सकता है एक पानी का छींटा umlauted चरित्र के बाद से "वर्णित" (और वहाँ "ँ" एक पूरी तरह से अलग संयुक्त स्वर होगा)
Anthon

आप "जितना संभव हो उतना सभ्य" कैसे परिभाषित करते हैं? वास्तविक कठिनाई मैपिंग को परिभाषित करने में है। इसकी तुलना में, प्रोग्रामिंग कार्य तुच्छ है। वास्तव में उपयोग किए जाने वाले मैपिंग बहुत भिन्न होते हैं और दो तरह से भाषा-विशिष्ट हो सकते हैं: वे पाठ की भाषा पर और पाठक की ग्रहण की गई भाषा पर निर्भर करते हैं (विशेषकर रोमांस के संबंध में)।
जुक्का के। कोर्पेला

@ JukkaK.Korpela "जितना संभव हो उतना अच्छा" निश्चित रूप से उन लोगों द्वारा परिभाषित किया गया है जिन्होंने "यूनिक्स पर उपलब्ध यूनिक्स टूल या प्रोग्रामिंग भाषा पुस्तकालय" बनाया है जो मैं पूछ रहा हूं। अगर मुझे जो सबसे अच्छा मिलने वाला है वह सब कुछ गैर-एएससीआईआई को एक अंडरस्कोर के साथ बदल रहा है, तो मैं और बहुत कुछ नहीं कर सकता। अपने स्वयं के टूल को छोड़कर, जो मैं नहीं करूँगा। मुझे लगता है कि यूनिक्स @ एसओ इस प्रश्न के लिए सबसे अच्छी जगह नहीं हो सकता है ...
23:76 पर उपयोगकर्ता7610

1
@ user7610 के अलावा iconvऔर tr, वहाँ Unidecode है । मैं इससे परिचित नहीं हूं, लेकिन यह वही कर सकता है जो आप चाहते हैं, यदि आप पायथन का उपयोग कर सकते हैं।
पीलेतन्फ़िल

1
@yellowantphil या JavaScript / नोड में नोड-यूनिडबॉस , C♯ में UnidecodeSharp, या पाठ :: पर्ल में Unidecode , जो इस नाम से पहले होता है। मुझे लगता है कि अन्य संस्करण हैं।
user7610

जवाबों:


11
konwert utf8-ascii

यह रूपांतरण तालिका के आधार पर सर्वश्रेष्ठ-प्रयास रूपांतरण करेगा। यदि आप लगभग इनपुट भाषा जानते हैं, तो बेहतर परिणाम देने वाली भाषा विशिष्ट फ़िल्टर हैं, जैसे

konwert utf8-xmetodo

एक्स-मेटोडो प्रतिनिधित्व में एस्पेरांतो का रूपांतरण है,

konwert UTF8-tex

TeX का प्रतिनिधित्व करने का प्रयास करेंगे dicritics, भाषा विशिष्ट पैरामीटर हैं:

konwert UTF8-ascii/de

सादा "a" के बजाय "ae" (जर्मन के लिए प्रथागत) में "ä" का अनुवाद करेंगे

konwert UTF8-ascii/rosyjski

"अंग्रेजी-जैसे" वाले, आदि के बजाय रूसी का अनुवाद करने के लिए पोलिश नियमों का उपयोग करेंगे ...


क्या यह konwertवेबसाइट का नवीनतम स्थान है ? क्या यह कहीं भी पैक किया गया है? github.com/taw/konwert/tree/master/konwert-1.8
निमो

25

यह कुछ चीजों के लिए काम करेगा:

iconv -f utf-8 -t ascii//TRANSLIT

echo ĥéĺłœ π | iconv -f utf-8 -t ascii//TRANSLITलौटता है helloe ?। कोई भी वर्ण जो iconvपरिवर्तित करना नहीं जानता है उसे प्रश्नवाचक चिन्ह से बदल दिया जाएगा।

iconvPOSIX है, लेकिन मुझे नहीं पता कि सभी सिस्टम में TRANSLITविकल्प है या नहीं। यह मेरे लिए लिनक्स पर काम करता है। इसके अलावा, IGNOREविकल्प उन वर्णों को चुपचाप त्याग देगा , जिन्हें लक्ष्य वर्ण सेट (देखें man iconv_open) में दर्शाया नहीं जा सकता ।

एक अवर लेकिन POSIX- आज्ञाकारी विकल्प का उपयोग करना है tr। यह आदेश सभी गैर- ASCII कोड बिंदुओं को एक प्रश्न चिह्न के साथ बदल देता है। यह एक समय में एक बाइट में UTF-8 पाठ पढ़ता है। "“ "के साथ प्रतिस्थापित किया जा सकता है E?या ?, इस पर निर्भर करता है कि क्या यह एक संयोजन उच्चारण या एक पूर्वनिर्मित चरित्र का उपयोग करके एन्कोड किया गया था।

echo café äëïöü | tr -d '\200-\277' | tr '\300-\377' '[?*]'

उदाहरण उदाहरण देता है caf? ?????, पूर्वगामी वर्णों का उपयोग करते हुए।


trएक समय में एक बाइट काम करने के लिए नहीं है। GNU tr करता है, लेकिन यह एक बग है।
स्टीफन चेज़लस

3
iconv -f utf-8 -t ascii//TRANSLITमेरे लिए अच्छा काम किया। इसने घुंघराले उद्धरणों को सीधे उद्धरणों में बदल दिया। धन्यवाद।
कर्नल पैनिक

ध्यान दें कि आइकॉन भारी रूप से उच्चारण किए गए पात्रों जैसे कि पिनिन पर झूमेगा।
sventechie

ध्यान दें कि //TRANSLITअन्य वर्णों के लिए भी काम करता है, जैसे iso-8859-1//TRANSLIT
स्किप्पी ले ग्रैंड गौरौ

iconviconv: illegal input sequence at position 1234मेरे लिए फ़ाइल देता और काटता है। अच्छा होगा अगर यह सिर्फ चरित्र को हटाए और फिर से अनुक्रम लेने की कोशिश करे।
२०:२१ पर १२


2

मेरे पास UTF-8 में एक फाइल है जिसमें [लोगों के नाम] कई भाषाओं में हैं [कि मैं ASIII में कुछ अर्थपूर्ण रूपांतरित करना चाहता हूं]।

आपका मतलब है कि आप निम्नलिखित नामों को कुछ ASCII स्ट्रिंग में बदलने में सक्षम होना चाहते हैं जो संबंधित व्यक्ति को आपत्ति नहीं होगी?

  • ராமானுஜன்। ஐயங் ஸ்கார்
  • عبد الله الثاني بن الحسين

मुझे संदेह है कि कोई स्वचालित उपकरण नहीं है जो ऐसा कर सकता है। व्यक्तिगत नामों के कोई या बहुत अधिक लैटिनकरण नहीं हो सकते हैं। सॉफ्टवेयर सांस्कृतिक रूप से स्वीकार्य संस्करण नहीं चुन सकता है। कम से कम सॉफ्टवेयर के बिना शामिल व्यक्ति की संस्कृति के बारे में बहुत कुछ जानने के बिना नहीं।

Https://stackoverflow.com/a/1398403/477035 भी देखें


2
perl -e 'use utf8; use Text::Unidecode; print unidecode("عبد الله الثاني بسين")'`` bd llh lthny bn lHsyn` पैदा करता है जो मेरे उद्देश्यों के लिए काफी अच्छा लिप्यंतरण है।
1576 बजे user7610

4
@ user7610: जॉर्डन के किंग अब्दुल्ला II ठीक हैं, असहमत हो सकते हैं। मैं इस मामले में एक स्पष्टीकरण तैयार करूंगा कि कोई व्यक्ति सीईओ से शिकायत करता है :-)
RedGrittyBrick 15

2

मैं पाठ के साथ पर्ल का उपयोग कर समाप्त हो गया :: इस के लिए यूनीडोस्कोप । उदाहरण:

perl -e 'use utf8; use Text::Unidecode; print unidecode("عبد الله الثاني بسين")

उत्पादन करता है bd llh lthny bn lHsyn, जो मेरे उद्देश्यों के लिए स्वीकार्य परिणाम है।

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