0

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

谢谢

4

3 回答 3

2

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

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

(以下内容被删除,因为我在谈论 ASCII,而不是 UTF-7 ......漫长的一天。)

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

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

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

现在,您正在寻找的可能是在比较中将“á”和“a”视为相同的东西。那是一个不同的问题。有关这方面的信息,请参阅执行文化不敏感字符串比较

于 2013-04-11T22:10:34.903 回答
2

这似乎与编码无关。在 C# 中,您使用什么编码来存储和传输并不重要,字符串始终在 UTF-16 内部,并且ä在组合形式中始终为 1 个字符长。

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

string str = "ä"; //a + U+0308, .Length == 2
str = str.Normalize(NormalizationForm.FormC); //just ä now, with Length == 1
于 2013-04-12T05:06:27.747 回答
0

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

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

于 2013-04-12T17:43:05.213 回答