【问题标题】:Displaying a unicode text in C#在 C# 中显示 unicode 文本
【发布时间】:2010-11-25 03:48:21
【问题描述】:

我的应用程序在 TextBox 和 LinkLabel 上显示英文、日文和中文字符。 目前,我检查是否有 unicode 字符并将字体更改为 MS Mincho,否则将其留在 Tahoma。

现在 MS Mincho 可以正确显示日语,但对于中文,我必须使用 Sim Sun。如何区分这两者?

如何确保无论字体/语言如何都能正确显示 unicode 文本?

【问题讨论】:

  • 刚刚在我的 BingDownloader 项目中使用了@shahkalpesh 的答案...bing.codeplex.com

标签: c# winforms unicode internationalization unicode-string


【解决方案1】:

如果您的每个文本都有 unicode 字符,则使用支持 unicode 的字体应该为您正确覆盖它(例如 Arial Unicode MS)。

【讨论】:

  • 这是完美的。我像@dtb 所说的那样调整。但是这个 ArialUnicode 字体不仅好看,而且很好地服务于目的......:D
  • 需要注意的是,Arial Unicode MS 必须获得许可才能重新分发。
  • @epotter:Arial Unicode MS 不是默认提供给最终用户的 .NET / Win7 /WinXP 吗?
  • 是的,它随操作系统一起提供。并且不需要这样分发它。版权问题专家可以提供这方面的指导。
  • @shahkalpesh:我引用from here:“更好的是“Arial Unicode MS”,但在没有安装 MS Office 的情况下,它可能在早于 Vista 的操作系统上不存在。”
【解决方案2】:

无论字体和语言如何,您都无法确保正确显示 unicode 文本,因为没有一种字体可以呈现所有可能的 unicode 字符。您必须选择一种可以显示您需要渲染的 unicode 字符的字体。

【讨论】:

  • @MusiGenesis:我认为问题是:如果字符串只包含一种语言的字符,你如何检测语言以便选择正确的字体?
【解决方案3】:

C# 中的所有字符串都是 Unicode。英文(拉丁文)、日文和中文代码点只是位于不同的代码点范围内。

我认为你有两个选择:

  • 查找包含所有三种语言的所有代码点字符的 Unicode 字体。

  • 尝试猜测语言并选择包含该语言代码点字符的字体。

对于选项 2,您可以查看 Unicode charts 以找出不同代码点的位置并扩展您的算法以猜测语言。

Hiragana 的示例:

bool IsHiragana(char ch)
{
    return (ch >= '\u3040') && (ch <= '\u309f');
}

bool IsHiragana(string s)
{
    return s.Count(IsHiragana) > 0;
}

【讨论】:

  • @dtb:我认为 OP 不想区分日语和中文等(至少不是这么说的)。 OP 说“我如何确保无论字体/语言如何都能正确显示 unicode 文本?”
  • @shahkalpesh:是的,但没有完美的答案。并非所有字体都包含所有 Unicode 代码点的字符,因此无论字体如何,都无法显示任意 Unicode 字符串。
  • @dtb:你也是对的。如果我是对的,Arial Unicode MS 涵盖了 OP 想要的脚本。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-21
  • 2023-03-15
  • 1970-01-01
  • 2017-04-03
  • 1970-01-01
相关资源
最近更新 更多