2012-11-09 32 views
8

UTF-8'deki karakterleri 'çevirmek' nasıl mümkün olabileceğini merak ediyorum PHP'deki Iconv doest gibi Javascript kullanarak en yakın ASCII eşdeğeri.

Örnek: o bir sürü iş olduğu komple bir karakter seti gerektirir ve) bir nedeni

ü,
ó Daha doğrusu bir yerine kullanmamayı tercih

o olur u olur b) Tam bir karakter kümesi elde etmek zor olurdu ve bir ya da iki eksik olsam asla emin olamam.

+0

siz "UTF-8", yapalım diyorum sen * gerçekten * Ne zaman UTF-8 demek? Örneğin, elemanları aslında hiç bir karakter içermeyen bir "karakter" dizisi, ancak basitçe UTF-8 kod birimleri 16 bite yükseltildi? Yoksa "Unicode" yani normal bir JavaScript UTF-16 dizesini mi kastediyorsunuz? – ruakh

+2

Bu mümkündür, ancak Unicode değerlerinden bir haritanın olmasının yanı sıra sizin (veya bir başkasının) uygun olduğunu düşündüğü ASCII'ye eşdeğer bir algoritmanın olmasının hiçbir yolu yoktur. Bir UTF-8 dizesinin * çok * çok farklı alfabe için kod noktaları içerebileceğini unutmayın. – Pointy

+0

Bunun için terim 'transkripsiyon' veya 'transliterasyon', muhtemelen orada bazı kütüphaneler var. – Kapep

cevap

8

@Pointy'de belirtildiği gibi, tek seçeneğiniz bir sözlüğe göre karakterleri eşlemek/değiştirmek.

Bunun gerçekten yararlı bulacağınızı

: buldum https://github.com/backbone-paginator/backbone.paginator/blob/a579796a30e583c4dfa09e0a86e4abd21e0b5b56/plugins/diacritic.js

+3

Burada daha fazla http://unicode.org/repos/cldr/trunk/common/transforms/Latin-ASCII.xml – Esailija

+0

Uoah @Esailija! Bu gerçekten tamamlandı! :) – alexandernst

+0

Bunun eski bir cevap olduğunu anlıyorum, ancak GitHub bağlantısı bozuldu. – Jaruba

9

kolay yolu:

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

Sadece dezavantaj: Bu EcmaScript 6'nın bir parçasıdır ve Tüm tarayıcılarda çalışma –

+0

Başka bir dezavantaj: sadece harfleri birleştirme, tam çevirisi değil. – cmbuckley

+0

, node.js'de gerçekten güzel çalışıyor;);) – superhero

İlgili konular