我想自动将 UTF-8 字符(如 â Ù á Č Ģ
)转换为 a U a C G
,以便它们在 URL 中可接受。
到目前为止我有这个:
Encoding sourceEncoding = Encoding.GetEncoding(28591); // ISO-8859-1
byte[] asciiBytes = Encoding.Convert(sourceEncoding, Encoding.ASCII, sourceEncoding.GetBytes(<source text>));
String asciiString = Encoding.UTF8.GetString(asciiBytes);
这种方法的两个问题:
- 这对某些字符(Č 和 Ģ)工作正常,但对于其他字符(â、Ù、á),它返回一个问号代替字符。
- 整个网站都是 UTF-8,而不是 ISO-8859-1,但是当我将 sourceEncoding 设置为 Encoding.UTF8 时,所有字符都转换为问号,所以它根本不起作用。
对如何实现这项工作有任何想法吗?
最佳答案
您最好使用 normalization 删除变音符号(通常称为重音符号,您知道:波浪号、cédille、元音变音符和其他 friend ) .
以下方法应替换 99% 的所有变音符号。然而,最后一个百分比仍将显示为?。如果你不想看到?字符,使用此方法后将其替换为空字符串。
public static string RemoveDiacritics(string value)
{
if (String.IsNullOrEmpty(value))
return value;
string normalized = value.Normalize(NormalizationForm.FormD);
StringBuilder sb = new StringBuilder();
foreach (char c in normalized)
{
if (System.Globalization.CharUnicodeInfo.GetUnicodeCategory(c) != System.Globalization.UnicodeCategory.NonSpacingMark)
sb.Append(c);
}
Encoding nonunicode = Encoding.GetEncoding(850);
Encoding unicode = Encoding.Unicode;
byte[] nonunicodeBytes = Encoding.Convert(unicode, nonunicode, unicode.GetBytes(sb.ToString()));
char[] nonunicodeChars = new char[nonunicode.GetCharCount(nonunicodeBytes, 0, nonunicodeBytes.Length)];
nonunicode.GetChars(nonunicodeBytes, 0, nonunicodeBytes.Length, nonunicodeChars, 0);
return new string(nonunicodeChars);
}
希望对您有所帮助!
关于c# - 如何将 UTF-8 字符转换为 ASCII 以便在 URL 中使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9565360/