2010-10-05 13 views
6

Używam ASP.NET MVC, MS SQL i IIS. Mam kilku użytkowników, którzy wykorzystali chińskie znaki w swoich informacjach o profilu. Jednak po wyświetleniu tej informacji pojawia się jako æŽå¼·è¯, ale są one poprawne w mojej bazie danych. Obecnie mój kod UTF dla moich stron HTML jest ustawiony na UTF-8. Czy powinienem zmienić go na UTF-16? Rozumiem, że istnieje few problems, które mogą pochodzić z tego, ale jakie są moje wybory?Czy należy zmienić kodowanie z UTF-8 na UTF-16, aby uwzględnić chińskie znaki w moim kodzie HTML?

Dziękuję

Aaron

+0

używasz 'htmlentities()' lub 'htmlspecialchars()' podczas wyprowadzania? – Andrew67

+0

te są tylko dla PHP, prawda? –

+0

Czy próbowałeś już określić swój zestaw znaków w swoich metatagach? https://www.w3.org/International/questions/qa-html-encoding-declarations –

Odpowiedz

4

Wszelkie kodowanie UTF powinien działać tak samo w ich zdolność do reprezentowania znaków Unicode więc przełączania do UTF-16 nie pomoże. Istnieje gdzieś problem z kodowaniem, a z UTF-16 skończyłoby się tylko złą złą reprezentacją HTML. Oczywiście jeśli masz bibliotekę, która po prostu koduje znaki spoza ASCII jako obiekty i obsługuje szerokie znaki, twój problem może zostać rozwiązany przez przełącznik. Istnieją jednak postacie, które potrzebują nawet dwóch szerokich znaków, a te nadal będą wyświetlane nieprawidłowo, chociaż użytkownicy rzadko mogą je zauważyć. Najlepszą opcją byłoby posiadanie tego, co produkuje kod HTML, aby poprawnie interpretować kodowanie UTF-8.

18

UTF-8 i UTF-16 kodują dokładnie ten sam zestaw znaków. Nie jest tak, że UTF-8 nie obejmuje chińskich znaków, a UTF-16 ma. UTF-16 używa jednolicie 16 bitów do reprezentowania postaci; podczas gdy UTF-8 używa 1, 2, 3, maksymalnie do 4 bajtów, w zależności od znaku, tak że znak ASCII jest reprezentowany jako 1 bajt. Zacznij od this Wikipedia article, aby uzyskać pomysł.

Tak więc istnieje niewielkie prawdopodobieństwo, że przejście na UTF-16 w ogóle Ci pomoże. Jest szansa, że ​​pogorszy to sytuację, co zostało omówione w pytaniu dotyczącym SO, które podałeś powyżej. Występuje problem w innym miejscu konfiguracji, który nie uwzględnia poprawnie znaków spoza zestawu ASCII lub znaków spoza alfabetu łacińskiego. Upewnij się, że każda część twojej konfiguracji działa w UTF-8.

+3

UTF-16 może mieć 2 jednostki kodu 16 bitów każda, przyjmując 32 bitów w sumie do reprezentowania znaku, zobacz przykłady na http: //en.wikipedia.org/wiki/UTF-16 – Anton

+1

@yuji W rzeczywistości UTF-8 może wykorzystywać do 4 bajtów. Początkowo było to 6, ale po uświadomieniu sobie, że będzie to przesada (używamy tylko około 110 000 dzisiaj, a 6 bajtów pozwoli na 2 miliardy!) Ludzie ustalili 4 bajty http://tools.ietf.org/html/rfc3629 – joakim

Powiązane problemy