Короткий ответ: вы добавляете 96 к значению юникода хираганы (ま), чтобы получить эквивалент катаканы (マ).
Вы можете определить, является ли символ хирагана, проверив, что его значение в юникоде падаетв диапазоне 3040-309F.
К сожалению, как упоминает Ной, многие имена пишутся с использованием кандзи: алфавит из примерно 40 000 символов, каждый из которых эквивалентен хирагане, и многие контекстуальные для их окружения.Если вы хотите поддержать их, вам нужно искать библиотеку японского языка, чтобы помочь вам.
К вашему сведению, катакана иногда используется для представления ЗАГЛАВНЫХ букв, что объясняет их использование здесь.(Учитывая строчные буквы Metro, я бы подумал, что катакана лучше подходит).
Если вы хотите поддерживать только хирагану, вот что должно помочь:
const int KatakanaStartCode = 0x30A0;
const int HiraganaStartCode = 0x3040;
const int HiraganaEndCode = 0x309F;
private char GetGroupChar(string name)
{
// Check for null/blank
// Check for numbers, etc
char firstChar = name[0];
int firstCharCode = (int)firstChar;
bool isHiragana = (HiraganaStartCode <= firstCharCode &&
firstCharCode <= HiraganaEndCode);
if (isHiragana)
{
char katakanaChar = (char)(firstCharCode +
(KatakanaStartCode - HiraganaStartCode));
return katakanaChar;
}
return Char.ToLowerInvariant(firstChar);
}
А потом:
string name = "またな たなかあ";
char s = GetGroupChar(name);
Debug.WriteLine(s); // マ