2013-04-11 31 views
0

是否存在將重音字符(如á或ä)視爲單個字符的編碼? 如果不是,那麼今天最常用的編碼是什麼?目前我正在使用UTF7,與其他類型的編碼兼容性如何?c#將字符編碼視爲簡單字符的重音字符

謝謝

+3

我相信任何UTF編碼都可以將'á'作爲單個代碼點以及'a'和變音代理的組合。你是不是把編碼與排序混淆起來?或者帶有代碼點的字符?或編碼字符串數據的代碼點?請參閱http://www.joelonsoftware.com/articles/Unicode.html。 – GSerg 2013-04-11 21:48:13

回答

2

你可能會考慮你要求的東西。你需要一個能夠識別'á'並將其變爲'a'的編碼。這是一個轉換器,而不是編碼。它必須知道源代碼是什麼編碼,以便它可以轉換爲您使用的任何編碼。

等一下,也許這不是你要求的。有編碼,將它們視爲單個字節。例如,ISO-8859-1 encoding(也稱爲Latin-1)將許多重音字符視爲單個字節。

(以下剔除,因爲我說的是ASCII,而不是UTF-7 ......漫長的一天。)

UTF-7是與許多其他編碼特別相容。它有128個可能的值:只有足夠的空間用於拉丁字母中使用的52個字母(大寫和小寫,組合),10個數字,32個控制字符和各種標點符號。但是,對於西班牙語來說這還不夠,例如,它具有顛倒的問題標記和感嘆號以及其他內容。

UTF-7與其他編碼「兼容」,因爲它可以表示整個Unicode字符集。但是隻有一些字符(稱爲「直接字符」)和一些控制字符可以直接編碼爲單個ASCII字節。這些字符將與UTF-8和許多單字節字符集中的字符相同。所有其他字符都由序列表示,並且與其他編碼不同。

今天最常用的編碼?在Web上,UTF-8被使用了很多。這也是創建StreamWriter時使用的默認編碼。對於我所做的工作(主要是英語和西歐字符集),它比其他任何工作都更好。

現在,您可能正在尋找的是將'á'和'a'視爲相同的東西。這是一個不同的問題。有關這方面的信息,請參閱Performing Culture-Insensitive String Comparisons

+0

幾乎所有的編碼都可以將á編碼爲單個*字符*。它可能是幾個字節。 á可以是單個字符或字母a,然後是組合變音符號 – noggin182 2014-03-29 13:40:01

+1

@ noggin182:注意到並固定。 – 2014-03-30 04:41:11

1

這似乎與編碼沒有任何關係。在C#中,存儲和傳輸使用什麼編碼並不重要,字符串總是以UTF-16內部編碼,而ä總是以組合形式存在1個字符長。

如果"ä".Length是給2給你,你的字符串是分解的形式,所有你需要做的是

string str = "ä"; //a + U+0308, .Length == 2 
str = str.Normalize(NormalizationForm.FormC); //just ä now, with Length == 1 
+0

感謝大家的幫助!我真的只是一個初學者,所以我想這顯示我還需要學習多少... 你們都幫了很多! – WolfyD 2013-04-12 11:32:18

+0

@WolfyD是我的回答錯誤?你不接受它,並接受與我相矛盾的另一個完全不同的答案。 – Esailija 2013-04-12 14:03:58

+0

對不起,我剛纔說我是新手。其實你的回答是正確的,因爲我問的問題是我問錯的東西,而當你的答案是正確的,它並沒有解決我的問題。 你的答案確實使'label1.Text = utf8.GetBytes(x).Length.ToString();'等於1,但是我沒有意識到的是那不是我的主要問題。 我正在處理的程序必須返回字符串的MD5哈希值,事實證明,我的真正問題主要是我一直使用'utf8'而不是ISO集。 再次抱歉,謝謝你,你的回答確實幫助我理解了一些事情。 – WolfyD 2013-04-12 15:19:23

0

很抱歉的混亂在這個問題上,我終於找到了我一直在尋找,這是我需要我的文本使用Windows-1250(中歐(Windows))代碼頁,因爲這是很多其他程序使用的,它正確支持字符,如€đł¤¤...等

感謝所有的幫助,這是一個有用的學習經驗。