使用CultureInfo将字符代码转换为字符C#

时间:2017-11-21 09:12:09

标签: c# globalization cultureinfo

我在C#项目中使用阿拉伯语 CultureInfo。在某个地方我使用Strings.Chr(chrCode)将字符代码转换为字符如果我选择的语言是英语正常工作,除了英语之外它是返回一些特殊字符

如果我选择阿拉伯语 CultureInfo,则会返回阿拉伯字符而不是英文字符。

当我选择其他CultureInfo时,请建议我如何获取英文字符。

1 个答案:

答案 0 :(得分:0)

您是否正在寻找Win-1256代码页(Strings.Chr 无法使用Unicode工作,但使用代码页)?

private static char ArabicChr(int chrCode) {
  if (chrCode < byte.MinValue || chrCode > byte.MaxValue)
    throw new ArgumentOutOfRangeException(
      "chrCode",
     $"chrCode must be in [{byte.MinValue}..{byte.MaxValue}] range");

  return Encoding.GetEncoding(1256).GetString(new byte[] { (byte)chrCode })[0];
}

如果要将其包装到方法中:

ض == 214 (\u0636)

结果:

private static char EnglishChr(int chrCode) {
  if (chrCode < byte.MinValue || chrCode > byte.MaxValue)
    throw new ArgumentOutOfRangeException(
      "chrCode",
     $"chrCode must be in [{byte.MinValue}..{byte.MaxValue}] range");

  return Encoding.GetEncoding(1252).GetString(new byte[] { (byte)chrCode })[0];
}

修改:如果您想获取英语字符,可以尝试使用 Win-1252 代码页:

"en-US"

一般情况中,如果您有文化名称,例如private static char Chr(int chrCode, string cultureName = "en-US") { if (chrCode < byte.MinValue || chrCode > byte.MaxValue) throw new ArgumentOutOfRangeException( "chrCode", $"chrCode must be in [{byte.MinValue}..{byte.MaxValue}] range"); int page = CultureInfo.GetCultureInfo(cultureName).TextInfo.ANSICodePage; return Encoding.GetEncoding(page).GetString(new byte[] { (byte)chrCode })[0]; }

{{1}}