2009-08-11 45 views
7

我通過網絡的形式接受用戶輸入(如UTF-8),將其保存到一個MySQL數據庫(使用UTF-8字符集)併產生後(編碼爲UTF-8)的文本文件。我想知道是否有任何使用UTF-8而不是像UCS-2之類的文字損壞的機會?在這種情況下UTF-8是否足夠好?UTF-8是否可以接受亞洲語言的閱讀/寫作?

回答

14

更重要的是,這也許就是你應曾經考慮使用的唯一編碼。

一些偉大的閱讀關於這個問題:

The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets (No Excuses!) by Joel Spolsky

+0

感謝您的鏈接 - 我剛纔讀過。我熟悉不同的編碼(固定長度字符與可變長度字符),但由於某種原因,我的印象是UCS-2可能代表更多字符。我想我錯了。 :) – 2009-08-11 17:54:28

+1

UCS-2和UTF-16經常被誤認爲 - 對某些碼點他們是等價的,但對於其他人,UTF-16替代碼點帶來了應對的事實,並不是所有的Unicode字符適合16位。順便說一句,Windows和Java實際上使用的是UTF-16,而不是UCS-2。 – bdonlan 2009-08-11 17:56:58

+0

請注意,UCS-2具有固定長度字符,而UTF-16具有可變長度字符。兩者都以16位塊的形式工作。 (另外請注意,UCS-2已過時。) – 2009-08-11 18:00:12

2

UTF-8可以代表任何Unicode字符。因此,你應該沒有UTF-8的問題。實際上,UTF-8甚至可以代表UCS-2所不能的一些字符(UCS-2只能通過U + FFFF表示U + 0000; UTF-8,UTF-16和UCS-4可處理所有的unicode碼點)

1

據我所知,UTF-8設計涵蓋所有這些早期的Unicode的變化,所以是的,它應該是罰款使用它了UCS-2。請參閱http://www.unicode.org/versions/Unicode5.1.0/並查看5.0書籍章節的邊欄;第9-12部分應該是你所追求的。

10

如果您正在使用亞洲語言文本(更比拉丁文字),你可能要考慮UTF-16的大量工作。 UTF-8可以準確地表示整個Unicode範圍的字符,但它對於主要是ASCII的文本進行了優化。 UTF-16在整個Basic Multilingual Plane上佔用空間。

但UTF-8肯定是「足夠好」 -there不會是簡單地產生,因爲你正在使用UTF-8過,比方說,UTF-16損壞。

0

它與梵文的奇妙合作。