c# - 如何在 LongListSelector 中对日语和其他非拉丁语名称进行分组?

标签 c# windows-phone-7 internationalization longlistselector

如果您将 Windows Phone 模拟器或设备设置为日语、韩语或其他非拉丁语并使用人脉应用程序,他们的 LongListSelector 实现会显示日语分组字符,然后是 unicode“globe with meridians”字符,后跟a-z 字符:

WP7 People App WP7 People App

使用 Windows Phone 工具包中的 LongListSelector,您必须执行自己的手动分组逻辑。如何获取日语/韩语/等名称分组字符的列表以及如何确定名称所属的分组字符(自从查看我的第二张屏幕截图后,用户名中没有分组字符)?

最佳答案

简短的回答是:将 96 添加到平假名 (ま) 的 unicode 值以获得等效的片假名 (マ)。

您可以通过检查字符的 unicode 值是否在 3040-309F 范围内来确定字符是否为平假名。

不幸的是,正如 Noah 提到的那样,许多名字都是用汉字拼写的:一个大约有 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); // マ

关于c# - 如何在 LongListSelector 中对日语和其他非拉丁语名称进行分组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9117597/

相关文章:

c# - 如何安全正确地将用户输入的数字转换为 double?

c# - 有没有一种简单的方法可以检测 Windows Phone 8 上的抖动?

C++ 特殊字符

PHP:使用不同语言的技巧

c# - 如何在 MVC4 中获取第二个下拉列表的值?

c# - 是否有像Apply这样的内置扩展方法?

c# - WP7 上的 Linq to SQL Select 性能非常慢

visual-studio-2010 - 如何在VMware中运行Windows Phone模拟器

java - 在运行时刷新 Swing 元素的语言

c# - asp.net web 表单中站点地图权限中的用户权限