c#字符编码,用于处理重音字符,如简单字符

时间:2013-04-11 21:45:20

标签: c# encoding character-encoding utf

是否存在将á或ä等重音字符视为单个字符的编码? 如果不是那么今天最常用的编码是什么?我目前使用的是UTF7,与其他类型的编码兼容性如何?

由于

3 个答案:

答案 0 :(得分:2)

您可能会考虑您的要求。您要求的编码会识别'á'并将其变为'a'。那是转换器,而不是编码。它必须知道源所在的编码,以便它可以转换为您正在使用的任何编码。

等等,也许这不是你要问的。 编码,将这些编码视为单个字节。例如,ISO-8859-1 encoding(也称为Latin-1)将许多重音字符视为单个字节。

(以下内容因为我说的是ASCII,而不是UTF-7 ......漫长的一天。)

UTF-7与许多其他编码不是特别兼容。它有128个可能的值:拉丁字母表中使用的52个字母(大写和小写,组合)的足够空间,10个数字,32个控制字符和各种标点符号。但是,对于西班牙人来说,这还不够,因为西班牙语有着颠倒的问题标记和感叹号以及其他内容。

UTF-7与其他编码“兼容”,因为它可以表示整个Unicode字符集。但只有一些字符(称为“直接字符”)和一些控制字符可以直接编码为单个ASCII字节。这些字符与UTF-8和许多单字节字符集中的字符相同。所有其他字符由序列表示,并且与任何其他编码不同。

今天最常用的编码?在网络上,UTF-8被大量使用。它也是您创建StreamWriter时使用的默认编码。对于我所做的工作(主要是英语和西欧字符集),它比其他任何工作都要好。

现在,你所寻找的东西可能会在比较中将'á'和'a'视为相同。那是一个不同的问题。有关相关信息,请参阅Performing Culture-Insensitive String Comparisons

答案 1 :(得分:1)

这似乎与编码无关。在C#中,用于存储和传输的编码无关紧要,字符串总是内部为UTF-16,ä在组合形式中总是1个字符长。

如果"ä".Length向您提供2,则您的字符串处于分解状态,您需要做的只是

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

答案 2 :(得分:0)

很抱歉对这个问题感到困惑,我终于找到了我要找的东西,这就是我需要我的文字才能使用Windows-1250(中欧(Windows))代码页,因为那是很多其他的程序使用,正确支持像𳣤等等字符

感谢所有帮助,这是一次有用的学习经历。