4

たとえば、CLCL クリップボード マネージャーによって行われる、ある種の変換/マッピングが必要です。

それが何をするかはそのようなものです:

次の Unicode テキストをコピーします: ūī
そして、CLCL はそれを次のように変換します: ui

そのような変換を行うためのテクニックはありますか? または、変換に使用できるマッピング テーブルがあるかもしれません。たとえば、シンボル ū が u にマップされているとします。

アップデート

助けてくれてありがとう。これが私が持ってきたものです(2つのソリューションのハイブリッド)。1つはErik Schierboomによって投稿され、もう1つはhttp://blogs.infosupport.com/normalizing-unicode-strings-in-c/#comment-8984から取得されました

public static string ConvertUnicodeToAscii(string unicodeStr, bool skipNonConvertibleChars = false)
{
    if (string.IsNullOrWhiteSpace(unicodeStr))
    {
        return unicodeStr;
    }

    var normalizedStr = unicodeStr.Normalize(NormalizationForm.FormD);

    if (skipNonConvertibleChars)
    {
        return new string(normalizedStr.ToCharArray().Where(c => (int) c <= 127).ToArray());
    }

    return new string(
        normalizedStr.Where(
            c =>
                {
                    UnicodeCategory category = CharUnicodeInfo.GetUnicodeCategory(c);
                    return category != UnicodeCategory.NonSpacingMark;
                }).ToArray());
}
4

2 に答える 2

2

しばらくの間、次のコードを使用しました。

private static string NormalizeDiacriticalCharacters(string value)
{
    if (value == null)
    {
        throw new ArgumentNullException("value");
    }

    var normalised = value.Normalize(NormalizationForm.FormD).ToCharArray();

    return new string(normalised.Where(c => (int)c <= 127).ToArray());
}
于 2013-03-28T13:59:05.183 に答える
-1

一般に、ASCII は Unicode のサブセットであるため、Unicode を ASCII に変換することはできません。

そうは言っても、Unicode の ASCII サブセット内の文字を Unicode に変換することは可能です。

C# では、通常、すべての文字列が既定で Unicode であり、すべてのコンポーネントが Unicode 対応であるため、変換を行う必要はありませんが、変換を行う必要がある場合は、次を使用します。

 string myString = "SomeString";
 byte[] asciiString = System.Text.Encoding.ASCII.GetBytes(myString);
于 2013-03-28T13:57:50.740 に答える