2011-08-19 4 views
25

. Dgggggeeeeegggggeeeeegggggeeeeegggggeeeeegggggeeeeegggggeeeeegggggeeeeeggggg ¤ DeeeeegggggeeeegggggeeeeegggggeeeeegggggeeeeegggggDlaczego te tajskich znaków wyświetlanych na stronie internetowej z długim ogonem?

że stwierdzono pewne interesujące postaci tak jak wklejony powyżej której odbywa szerokość tylko trzy przestrzenie., Jednakże dokładna długość łańcucha wynosi 380.

że kontrolowane ciąg pythonowa i koduje łańcuch jest w następujący sposób :.

„\ xe0 \ xb8 \ x94 \ xe0 \ xb9 \ x89 \ xe0 \ xb9 \ x89 \ xe0 \ xb9 \ x89 \ xe0 \ xb9 \ x89 \ xe0 \ xb9 \ x89 \ xe0 \ xb9 \ x87 \. xe0 \ xb9 \ x87 \ xe0 \ xb9 \ x87 \ xe0 \ xb9 \ x87 \ xe0 \ xb9 \ x87 \ xe0 \ xb9 \ x89 \ xe0 \ xb9 \ x89 \ xe0 \ xb9 \ x89 \ xe0 \ xb9 \ x89 \ xe0 \. xb9 \ x89 \ xe0 \ xb9 \ x87 \ xe0 \ xb9 \ x87 \ xe0 \ xb9 \ x87 \ xe0 \ xb9 \ x87 \ xe0 \ xb9 \ x87 \ xe0 \ xb9 \ x89 \ xe0 \ xb9 \ x89 \ xe0 \ xb9 \. x89 \ xe0 \ xb9 \ x89 \ xe0 \ xb9 \ x89 \ xe0 \ xb9 \ x87 \ xe0 \ xb9 \ x87 \ xe0 \ xb9 \ x87 \ xe0 \ xb9 \ x87 \ XE. 0 \ xb9 \ x87 \ xe0 \ xb9 \ x89 \ xe0 \ xb9 \ x89 \ xe0 \ xb9 \ x89 \ xe0 \ xb9 \ x89 \ xe0 \ xb9 \ x89 \ xe0 \ xb9 \ x87 \ xe0 \ xb9 \ x87 \ xe0 \. xb9 \ x87 \ xe0 \ xb9 \ x87 \ xe0 \ xb9 \ x87 \ xe0 \ xb9 \ x89 \ xe0 \ xb9 \ x89 \ xe0 \ xb9 \ x89 \ xe0 \ xb9 \ x89 \ xe0 \ xb9 \ x89 \ xe0 \ xb9 \. x87 \ xe0 \ xb9 \ x87 \ xe0 \ xb9 \ x87 \ xe0 \ xb9 \ x87 \ xe0 \ xb9 \ x87 \ xe0 \ xb9 \ x89 \ xe0 \ xb9 \ x89 \ xe0 \ xb9 \ x89 \ xe0 \ xb9 \ x89 \. xe0 \ xb9 \ x89 \ xe0 \ xb9 \ x87 \ xe0 \ xb9 \ x87 \ xe0 \ xb9 \ x87 \ xe0 \ xb9 \ x87 \ xe0 \ xb9 \ x87 \ xe0 \ xb9 \ x89 \ xe0 \ xb9 \ x89 \ xe0 \. xb9 \ x89 \ xe0 \ xb9 \ x89 \ xe0 \ xb9 \ x89 \ xe0 \ xb9 \ x87 \ xe0 \ xb9 \ x87 \ xe0 \ xb9 \ x87 \ xe0 \ xb9 \ x87 \ xe0 \ xb9 \ x87 \ xe0 \ xb9 \. x89 \ xe0 \ xb9 \ x89 \ xe0 \ xb9 \ x89 \ xe0 \ xb9 \ x89 \ xe0 \ xb9 \ x89 \ xd0 \ XB4 \ xe0 \ xb8 \ x94 \ xe0 \ xb9 \ x87 \ xe0 \ xb9 \ x87 \ xe0 \. xb9 \ x87 \ xe0 \ xb9 \ x87 \ xe0 \ xb9 \ x87 \ xe0 \ xb9 \ x89 \ xe0 \ xb9 \ x89 \ xe0 \ xb9 \ x89 \ xe0 \ xb9 \ x89 \ xe0 \ xb9 \ x89 \ xe0 \ xb9 \. x87 \ xe0 \ xb9 \ x87 \ xe0 \ xb9 \ x87 \ xe0 \ xb9 \ x87 \ xe0 \ xb9 \ x89 \ xe0 \ xb9 \ x89 \ xe0 \ xb9 \ x89 \ xe0 \ xb9 \ x89 \ xe0 \ xb9 \ x89 \. xe0 \ xb9 \ x87 \ xe0 \ xb9 \ x87 \ xe0 \ xb9 \ x87 \ xe0 \ xb9 \ x87 \ xe0 \ xb9 \ x87 \ xe0 \ xb9 \ x89 \ xe0 \ xb9 \ x89 \ xe0 \ xb9 \ x89 \ xe0 \. xb9 \ x89 \ xe0 \ xb9 \ x89 \ xe0 \ xb9 \ x87 \ xe0 \ xb9 \ x87 \ xe0 \ xb9 \ x87 \ xe0 \ xb9 \ x87 \ xe0 \ xb9 \ x87 \ xe0 \ xb9 \ x89 \ xe0 \ xb9 \. x8 9 \ xe0 \ xb9 \ x89 \ xe0 \ xb9 \ x89 \ xe0 \ xb9 \ x89 \ xe0 \ xb9 \ x87 \ xe0 \ xb9 \ x87 \ xe0 \ xb9 \ x87 \ xe0 \ xb9 \ x87 \ xe0 \ xb9 \ x87 \. xe0 \ xb9 \ x89 \ xe0 \ xb9 \ x89 \ xe0 \ xb9 \ x89 \ xe0 \ xb9 \ x89 \ xe0 \ xb9 \ x89 „

wydaje się, że łańcuch jest kombinacją trzech thai charakteru:

.
ด \xe0\xb8\x94 THAI CHARACTER DO DEK 

้ \xe0\xb9\x89 THAI CHARACTER MAI THO 

็ \xe0\xb9\x87 THAI CHARACTER MAITAIKHU 

I moje pytania:

  1. Dlaczego te zachowania znaków więc inaczej, jest to błąd
  2. jak mogę uniknąć go w Sit?. e (być może z jakiegoś filtra html)?

UPDATE

Przetestowałem znaki z kilku przeglądarek, a długi ogon pojawia się tylko w Chrome i Firefox na platformie Windows.

Poniżej przedstawiono zrzut ekranu wziąłem:

wygrać 7 IE8 win 7 ie8


ubuntu firefox ubuntu firefox


wygrać 7 chrom win 7 chrome


wygrać 7 firefox win 7 firefox


Dlatego myślę, że jest to błąd przeglądarki związanych.

+3

LOL, w postaciach powyżej: P –

+2

Świetnie, chciałbym też wiedzieć, dlaczego oni też tak to pokazują. –

+0

Programowanie - jak dokładnie? – paxdiablo

Odpowiedz

4

Wymienione kody są wszystkie w formacie UTF-8, dlatego każda postać potrzebuje 3 bajtów. Respectice Unicode codes są:

Te dwie ostatnie są w kategorii Mark, Nonspacing i mają właściwość Combine (Canonical_Combining_Class) ustawiono na 107, co oznacza, że ​​punkty kodowe są łączone z poprzedzającym punktem kodowym w renderowaniu.

Przykład zaczyna się od pojedynczego znaku i dodaje wiele niepasujących znaków na wierzchu.

Porównaj z tego kodu C#:

char DODEK = (char)0x0e14; 
char MAITHO = (char)0x0e49; 
char MAITAIKHU = (char)0x0e47; 

string thai = new string(new char[] { DODEK, MAITHO, MAITAIKHU }); 
Console.WriteLine("number of code points: " + thai.Length); 

var si = new System.Globalization.StringInfo(thai); 
Console.WriteLine("number of text elements: " + si.LengthInTextElements); 

wyjściowa:

number of code points: 3 
number of text elements: 1 

Zobacz także .Net StringInfo class.

8

Występują dwa problemy, jeden w systemie wyjściowym (mechanizm renderowania czcionek), który nie jest tajlandzki i jeden w systemie wejściowym, który wygenerował ten tekst w pierwszej kolejności.

Jeśli zrobiłeś swoją pracę domową, wiedziałbyś, że mai tho i maitaikhu (nazwy UniCode) są tym, co UniCode określa jako Non Spacing Markers (NSM). Oznacza to, że renderer czcionek nie powinien przejść do następnej komórki znakowej podczas wyświetlania tego glifu.

Aby uniknąć bałaganu, który widzisz powyżej, konsorcjum Thai API (TAPIC) opracowało standard WTT 2.0, który opisuje zarówno sposób, w jaki algorytm renderowania czcionek powinien obsługiwać tajski porządek listu, gdy odbierze go jako dane wejściowe, jak i sposób wprowadzania danych. metoda powinna umożliwiać wprowadzanie takich znaków, jeśli spróbujesz je wpisać.

Standardization and Implementations of Thai Language Overview

libthai obejmuje oba sposoby wejściowe i wyjściowe.

thaicheck to mały program, który wykrywa problemy z sekwencjami liter i naprawia je.

Przy okazji, nie możesz mieć sekwencji (słowa) do dek, mai tho i maitaikhu; sekwencja wejściowa jest szumem.

Należy pamiętać, że niektóre edytory mają uszkodzone metody wprowadzania, które umożliwiają wpisywanie wielu NSM, których nie można połączyć, ale metoda wyjściowa wyrenderuje tylko sekwencje prawne; wynikiem jest nielegalny ciąg wejściowy, który wygląda na prawidłowy dla użytkownika pod numerem jego systemu.

+13

jeśli wszyscy "odwalili pracę domową", nie potrzebowalibyśmy stackoverflow – devio

+0

Pomyślałem, że uznano za grzeczne, aby spróbować znaleźć odpowiedź na twój problem przed opublikowaniem go tutaj. – koan

+4

Zrobiłem trochę pracy domowej, ale jestem początkującym dla znaków tajskich, dlatego nie mogłem wskazać, jak google to. I to jest powód, dla którego uważam, że SO jest niesamowite. –

2

Nigdy nie należy łączyć setek znaków Unicode w jedną graficzną postać, chociaż formaty Unicode technicznie na to pozwalają; zazwyczaj łączymy nie więcej niż 2 lub 3 znaki.

W języku tajskim masz samogłoski i znaki tonu, które są wyświetlane nad znakiem zgodności (czasem samogłoski pojawiają się poniżej, a nawet wokół znaków z konsorcjum ...). To trochę jak akcenty na samogłoski w języku francuskim (& eacute ;, & egrave; ...) lub umlauty w języku niemieckim. To nie jest normalne mieć więcej niż dwa takie znaki w języku tajskim (i więcej niż jeden w języku francuskim lub niemieckim). Oznacza to, że Twój tekst jest nielegalnym tekstem tajskim (może być napisany w celu dostarczenia zabawnych efektów graficznych, takich jak "sztuka ASCII"). Nie dziwię się, że taki nielegalny tekst jest różnie interpretowany w zależności od przeglądarki.

Powiązane problemy