C # UTF-32 ToLower - PullRequest
       22

C # UTF-32 ToLower

0 голосов
/ 30 декабря 2010

Я ищу способ конвертировать Unicode UTF-32 (int) в нижний регистр. В Java что-то вроде этого сделало бы свое дело:

Character.toChars(Character.toLowerCase(Character.codePointAt(text, i)))

У меня есть UTF-32 из Char.ConvertToUtf32, но, похоже, нет способа уменьшить это значение строчными буквами.

UPDATE: Я имею дело с потоком / массивом символов, я нашел точки кода, ища суррогат hi, чем-то похожий на фрагмент кода Java выше. Преобразование туда и обратно в строку будет неэффективным.

1 Ответ

0 голосов
/ 11 января 2012

Единственный встроенный способ сделать это - преобразовать UTF-32 в строку. Должно работать что-то вроде следующего:

static Int32 ToLower(Int32 c)
{
    // Convert UTF-32 character to a UTF-16 String.
    var strC = Char.ConvertFromUtf32(c);

    // Casing rules depends on the culture.
    // Consider using ToLowerInvariant().
    var lower = strC.ToLower();

    // Convert the UTF-16 String back to UTF-32 character and return it.
    return Char.ConvertToUtf32(lower, 0);
}

Вы указываете, что это неэффективно для ваших нужд. Вы оценили это?

Если вы все еще настаиваете на использовании обсадной колонны на UTF-32, то вам нужно будет сделать свою собственную. К счастью, Консорциум Unicode проделал большую часть тяжелой работы. Взгляните на файл Unicode , сворачивающий файл . Разобрать этот файл, сохраняя данные в соответствующей структуре. Тогда можно сопоставить регистр напрямую с вашими данными в любом формате, который вы предпочитаете.

...