İnsanların Unicode yerine Japonlara özgü kodlamaları kullanmalarına neden olan sorunlar nelerdir?


24

İşyerinde Shift-JIS ve diğer kodlamalarda birçok Japonca metin dosyasına rastladım. Tüm bilgisayar kullanıcıları için birçok mojibake (okunamayan karakter) sorununa neden olur . Unicode, bu tür bir sorunu tüm diller için tek bir karakter seti tanımlayarak çözmeyi amaçladı ve UTF-8 seri hale getirme işleminin İnternette kullanılması önerildi. Öyleyse neden herkes Japonca kodlamalardan UTF-8'e geçmiyor? UTF-8'in hangi sorunları veya dezavantajları insanları engelliyor?

EDIT: W3C Unicode ile ilgili bilinen bazı problemleri listeler , bu bir sebep olabilir mi?


Aslında gittikçe daha popüler siteler UTF-8’de, bir örnek ニ ​​コ ニ 動画 動画 ve は て な
Ken Li

8
Neden herkes ISO-8851-1'den UTF-8'e geçmiyor?
ysdx

1
Buraya geçerken , SHIFT-JIS -> UTF-8 dönüşümünün kayıpsız olmadığı ve bu halihazırda kullanımda olan SHIFT-JIS'i kullanmaya devam etmenin önemli bir nedeni olacağı belirtiliyor. Ancak görünebilir factoidin şaşırtıcı olduğunu buldum, bu nedenle, buradaki cevaplardan birinin daha ayrıntılı olabileceğini veya en azından iddia için bir kaynak sağlayabileceğini umuyorum, ancak hiçbiri yapmıyor.
Kyle Strand,


@ LudwigSchulze Teşekkürler. Hala çok fazla ayrıntı değil, ama en azından resmi bir kaynak ...
Kyle Strand

Yanıtlar:


28

Tek kelimeyle: miras.

Shift-JIS ve diğer kodlamalar, Unicode'u kullanıma sunmadan / popüler hale getirmeden önce kullanıldı, çünkü Japoncayı hiç kodlamanın tek yolu bu değildi. Şirketler sadece Shift-JIS'i destekleyen altyapıya yatırım yaptılar. Bu altyapı artık Unicode'u desteklese bile, hala kodlamadan ne işe yaramazsa , kodlamadan çok işe yaramayan çeşitli nedenlerden dolayı Shift-JIS'e takıldılar ? için göç-all-varolan-belgeler-is-çok-pahalı .

Aynı nedenlerden dolayı hala ASCII veya latin-1'i kullanan pek çok batılı şirket var, ancak hiç kimsenin bir soruna neden olmadığından hiçbir şey fark etmiyor.


8
Japon yazılım endüstrisi ... yeni yazılım / standartların kullanılmasında kirden daha yavaş.
Mark Hosang

2
@Mark Truer kelimeleri söylenmedi! (Ben ... Japon IT ile / içinde çalışıyorum -_- ;;)
deceze

5
Doğru, ancak Batılı şirketler, eski yazılımımızın, uzun süredir MBCS-temiz kod yazmak zorunda olan Asyalılara göre UTF-8'e geçişi zorlaştıran, 1 bayt = 1 karakterlik zor kodlanmış varsayımlarla dolu olduğunu düşünüyor.
dan04, kas

@MarkHosang İfadenizin% 100 doğru olduğunu onaylıyorum (Tokyo'daki Japon şirketi için çalışıyorum)
Hassan Tareq

9

Özellikle Japonya'da geliştirilen, UTF-8 veya başka bir Unicode gösterimini varsayılan kodlama dili kodlaması yapmamamın nedenini hatırlıyorum:

  • Sebep 1: Han birleşmesi . Karakter kümeleri (burada "alfabe" nin doğru olup olmadığından emin değilsiniz), Çin, Kore ve Japonya'nın hepsi birbiriyle ilişkiliydi, ayrıntılar hakkında emin değillerdi, ortak tarihçeden gelişti. Unicode konsorsiyumu, görünümleri aynı 3 dilde de olsa, aynı karakterdeki tüm varyantları (Çince, Japonca ve Korece) kodlamak için yalnızca tek bir Unicode kod noktasını boşa harcama kararı aldı. Sebep, görünüş, metni görüntülemek için kullanılan font tarafından belirlenmelidir.

Anlaşılan, bu akıl yürütme, Japonca kullanıcılar tarafından saçma olduğu anlaşılıyor, çünkü Latince alfabesi Yunan alfabesinden geldiği için, Latin alfabesinin Yunan alfabesinden geldiği için, yalnızca tek bir kod noktasına sahip olmak yeterlidir. ” α "ve Latin" a "ve görünümün kullanılan font tarafından belirlenmesine izin verin. ("Β" = "b", "γ" = "g" vb. İçin aynı)

(Durum böyle olsaydı burada stackexchange'te yunanca karakterleri ekleyemeyeceğime dikkat edin.)

  • Sebep 2: Yetersiz karakter dönüşümleri. Karakterleri Unicode'dan eski Japonca kodlamalara ve geriye dönüştürmek için tablolar gerekir, yani Unicode kod noktası değerinden eski kod noktası değerine basit bir hesaplama yoktur ve bunun tersi de geçerlidir. Ayrıca dönüştürürken bir miktar bilgi kaybı söz konusudur çünkü bir kodlamadaki tüm kod noktaları diğer kodlamada benzersiz bir gösterime sahip değildir.

Artık hatırlamamam için daha fazla sebep olabilir.


Görünüşe göre, Ruby 2.0'dan itibaren UTF-8'i varsayılan olarak benimsemiştir. Fakat Han birleşmesi , Unicode dünyasında, daha önce hiç duymadığım için yeterince dikkat çekmeyen, gerçekten önemli bir kırışıklık (ve oldukça tartışmalı bir konu ) gibi görünüyor .
Kyle Strand

Ve burada Han birleşme konusunda bir Wikipedia makalesi var: en.wikipedia.org/wiki/Han_unification Bu gerçekten geçerli bir sorun gibi görünüyor, büyük cevap! Ayrıca, tarih kaybı iyi bir sebep olacaktır.
spbnick

8

deceze'nin cevabının gerçeğe dair çok güçlü bir unsuru var, ancak Shift-JIS ve diğerlerinin hala kullanımda olmalarının bir başka nedeni daha var: UTF-8, çoğunlukla CJK setinde, bazı diller için korkunç derecede yetersiz. Shift-JIS, iki bayt genişliğinde bir kodlama olan IIRC'dir, UTF-8 ise CJK ve diğerleri ile kodlamalarında tipik olarak 3 bayt ve bazen 4 bayttır.


7
Bu doğru olsa da, her zaman Shift-JIS kadar verimli olabilecek UTF-16'nın bir alternatifi vardır. Ayrıca, farklı kodlamalarla uğraşmanın baş ağrısının, bu gün ve yaştaki büyüklükteki hafif artışa ağır geldiğini savunuyorum. Diğer bir deyişle, ben verimlilik argümanı hiç duymadım için hala kullanan herkes tarafından Shift-JIS. ;-)
deceze

5
Yine de etkinlik konusunu tembellik ve atalet için bir bahane olarak kullandım.
SADECE

1
UTF-16, temel ASCII karakterlerini [örneğin HTML'de oldukça büyük bir sayı olan] iki kat daha büyük yapar. Anladığım kadarıyla, bu aslında Japon web sayfaları için UTF-16'yı UTF-8'den daha da kötü hale getiriyor.
Random832

2
@JUST Doğru fikrim: "Kaynağı Görüntüle" yi veya eşdeğerini deneyin. Tüm asıl metnin Japonca olduğunu varsayarsak, İngilizce'den türetilmiş ve ASCII'de temsil edilen birçok anahtar kelime ve benzeri olabilir.
David Thornley

4
Bu bana daha sonra bulmamız için bir neden gibi geliyor . Verimliliğin, statüko ile hiçbir ilgisi olmadığından kesinlikle eminim. Bana göre bu sadece atalet ve miras. Aslında Japon programcılar tarafından üretilen çoğu kodun diğer Japonlar için olduğu gerçeğiyle de ilgili olduğunu düşünüyorum, bu yüzden Unicode gibi bir şey kullanma gereği duymuyorlar.
Julien Guertault

2

Başlıca nedenler arasında dize boyutu / bellek kullanımını sayın.

UTF-8'de, doğu-asya dilleri genellikle karakterleri için 3 veya daha fazla bayta ihtiyaç duyar. Ortalama olarak UTF-16'yı kullanmaya göre % 50 daha fazla belleğe ihtiyaçları vardır - ikincisi zaten yerel kodlamaya göre daha az verimlidir.

Diğer ana sebep, karar almanın belirttiği gibi miras olacaktır.


2

Diğerlerinin dediği gibi eski ve depolama büyüklüğü, ancak bir şey daha var: Katakana karakterleri.

Shift-JIS’de Katakana karakterlerini temsil etmek sadece bir bayt alır, bu yüzden Katakana dahil Japonca metin karakter başına 2 bayttan daha az sürer (50/50’lik bir karışım için 1.5); / char) ve UTF-8'den (3 byte / char) çok daha verimli.

Ucuz depolama bunu daha küçük bir problem haline getirmeliydi, ama görünüşe göre değil.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.