2012-11-09 51 views
8

मुझे आश्चर्य है कि यूटीएफ -8 में वर्णों का अनुवाद कैसे करना संभव है जावास्क्रिप्ट का उपयोग कर निकटतम ASCII समकक्ष, जैसे Iconv PHP में करता है।

उदाहरण: क्योंकि एक) यह पात्रों का एक पूरा सेट है, जो बहुत काम है की आवश्यकता है और

ü, यू हो जाता है
ओ ओ

हो जाता है मैं नहीं बल्कि एक की जगह का उपयोग नहीं होता है ख) मुझे पात्रों का पूरा सेट प्राप्त करना मुश्किल होगा, और अगर मैं एक या दो खो रहा हूं तो मैं कभी भी निश्चित नहीं रहूंगा।

+0

जब आप कहते हैं कि "UTF-8", आप * वास्तव में * मतलब यूटीएफ -8? जैसे, "पात्रों" की एक स्ट्रिंग जिसका तत्व वास्तव में बिल्कुल अक्षर नहीं हैं, लेकिन बस यूटीएफ -8 कोड-इकाइयों को 16 बिट्स में पदोन्नत किया गया है? या आपका मतलब है "यूनिकोड", यानी, एक सामान्य जावास्क्रिप्ट यूटीएफ -16 स्ट्रिंग? – ruakh

+2

यह संभव है, लेकिन यूनिकोड मानों से मानचित्र होने के अलावा, जो भी ASCII "समकक्ष" (या कोई) उचित होने के बारे में सोचने के अलावा इसे करने के लिए कोई एल्गोरिदमिक तरीका नहीं है। ध्यान दें कि एक यूटीएफ -8 स्ट्रिंग में * कई * बहुत अलग वर्णमाला के लिए कोड पॉइंट शामिल हो सकते हैं। – Pointy

+0

इसके लिए शब्द 'ट्रांसक्रिप्शन' या 'लिप्यंतरण' है, शायद वहां कुछ पुस्तकालय हैं। – Kapep

उत्तर

8

जैसा कि @ पॉइंटी ने कहा, आपका एकमात्र विकल्प एक शब्दकोश के अनुसार वर्णों को मानचित्र/प्रतिस्थापित करना है।

आप यह वास्तव में उपयोगी मानते हैं: https://github.com/backbone-paginator/backbone.paginator/blob/a579796a30e583c4dfa09e0a86e4abd21e0b5b56/plugins/diacritic.js

+3

यहां और अधिक http://unicode.org/repos/cldr/trunk/common/transforms/Latin-ASCII.xml – Esailija

+0

उओह @ ईसेलिया! यह वास्तव में पूरा है! :) – alexandernst

+0

मुझे एहसास है कि यह एक पुराना जवाब है, लेकिन गिटहब लिंक टूटा हुआ है। – Jaruba

9

सबसे आसान तरीका मैंने पाया:

var str = "üó"; 
var combining = /[\u0300-\u036F]/g; 

console.log(str.normalize('NFKD').replace(combining, '')); 

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/normalize

+0

केवल दोष: यह एक्मास्क्रिप्ट 6 का हिस्सा है, और नहीं सभी ब्राउज़रों पर काम –

+0

एक और दोष: केवल अंक संयोजन को कवर करता है, पूर्ण लिप्यंतरण नहीं। – cmbuckley

+0

हालांकि node.js में वास्तव में अच्छा काम करता है;) – superhero