【发布时间】:2020-04-15 19:30:03
【问题描述】:
我正在将一个项目从 VB6 迁移到 C#。
在代码的一部分中,它获取 ANSI 中的 int 值(我认为!)并将 char 值获取为字符串:
StringBuilder s_e = new StringBuilder();
s_e.Append(Microsoft.VisualBasic.Strings.Chr(inNCr).ToString());
尝试过
s_e.Append((char)inNCr);
但仅适用于 a-z 而不适用于其他字符,因此结果并不总是正确的。
我知道我可以使用 Microsoft.VisualBasic; 并完成它,但是有什么方法可以在 c# 中“本地”完成它?
提前致谢。
[编辑] 需要澄清。
inNCr 是 int 形式的字符的字符代码。那么该 int 应该是一个 char 并在应用程序上显示为一个字符串。 例如: 字符代码 130 应该是 '‚' 但在应用程序上显示为空白,在调试时显示为 \u0082
【问题讨论】:
-
您可能正在寻找
Convert.ToChar。 MSDN:docs.microsoft.com/en-us/dotnet/api/… -
有没有正确转换字符的例子?
-
另外,请注意并非所有字符都可以打印.. 除非您安装了正确的字体:stackoverflow.com/questions/5750203/…
-
VB6 和 .NET 语言都没有将自己限制为“ANSI”字符。 VB6 使用了 Windows NT 的 Unicode 功能。在 .NET 中,字符处理更加灵活。您的代码没有显示
inNCr是什么类型,或者它是如何被初始化的。你能展示足够多的东西让我们看到你在做什么吗? -
ANSI编码不存在(机构存在)。高于 ASCII 127,您有本地编码或默认编码(=>CodePage 1252,又名iso-8859-1(但实际上不是相同的编码),又名Windows-1252,又名Western European (Windows) => System.Text.SBCSCodePageEncoding,又名Encoding.Default) .因此,您可以编写:var bytes = new byte[] { 130, 140 }; var uniChars = Encoding.GetEncoding(1252).GetChars(bytes); [StringBuilder].Append(uniChars);或使用 Encoding.Default 预定义集:var uniChars = Encoding.Default.GetChars(bytes); [StringBuilder].Append(uniChars);