我在C#项目中使用阿拉伯语 CultureInfo
。在某个地方我使用Strings.Chr(chrCode)
将字符代码转换为字符如果我选择的语言是英语它正常工作,除了英语之外它是返回一些特殊字符。
如果我选择阿拉伯语 CultureInfo
,则会返回阿拉伯字符而不是英文字符。
当我选择其他CultureInfo
时,请建议我如何获取英文字符。
答案 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}}