c# - 如何将 UTF-8 字符转换为 ASCII 以便在 URL 中使用?

标签 c# asp.net .net dotnetnuke

我想自动将 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);

这种方法的两个问题:

  1. 这对某些字符(Č 和 Ģ)工作正常,但对于其他字符(â、Ù、á),它返回一个问号代替字符。
  2. 整个网站都是 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/

相关文章:

C# IE11 selenium webdriver,新选项卡没有新窗口句柄

c# - SQL View 的 LINQ 版本?

c# - 我可以使用什么来进行本地 MySQL 测试?

asp.net - 如何在 ASP.NET 中以编程方式模拟 HTTP POST?

c# - 从用户控件内部在 Umbraco 中进行 Ajax 调用

sql - bigint 的顺序 GUID

javascript - 回发期间启用/禁用 Asp.net 图像按钮

c# - 访问从java到dotnet的请求

c# - 使用 C# 获取文件夹中包含大小的文件元数据的快速方法是什么?

c# - DependencyInjection : Initialize class, 在被调用之前(必需)?