我有一个包含字符“á”和“ã”的字符串,并且不显示它们。 “ã”将显示为“Æ”,而不会出现“á”。 我在这里经历了很多关于SO的问题,但没有一个解决我的问题,例如: How can I transform string to UTF-8 in C#?,因此除非我有完全不同的答案,否则将我重定向到另一个问题可能不会做太多。
好吧,我当前正在使用的代码就是我链接回那里的问题的代码,
byte[] bytes = Encoding.Default.GetBytes(myString);
myString = Encoding.UTF8.GetString(bytes);
与此同时,特殊字符都显示为问号(。)。
如果我将UTF8更改为UTF32,则会显示带有问号的整个字符串。
我也尝试过:
Encoding enc = Encoding.GetEncoding("ISO-8859-1");
string original = myString;
byte[] iso_8859_1 = enc.GetBytes(original);
string roundTripped = enc.GetString(iso_8859_1);
Debug.Assert(original == roundTripped);
在尝试更改编码之前,这会给我与初始输出相同的输出(因此,它对我的字符串基本上没有任何作用)。
我已经检查了正在使用它的应用程序的配置文件,并且编码设置为UTF-8,所以在这里也不是问题所在。
有人知道什么可能是错误的,还是有人通过其他方式“解码”我的字符串并显示正确的输出?
我还尝试过以下问题的答案:Encoding issue when handling a string that contains "question mark" (�),如果我实际上使用单词“ESPAÑOL”,则显示效果很好,但是如果我在字符串中输入,则不会。其中唯一的“特殊”字符是我提到的两个字符,除非空格和行的变化也有所不同(但我不知道)。
如果有任何其他有用的信息,请告诉我,我已经尝试解决了几个小时。
-编辑-
这就是我获取myString的方式:
Process proc = new Process();
proc.StartInfo.StandardOutputEncoding = Encoding.Unicode;
proc.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
proc.StartInfo.FileName = "cmd.exe";
proc.StartInfo.Arguments = "start /c cscript.exe /U " + Path.Combine(Environment.SystemDirectory, "slmgr.vbs") + " /xpr";
proc.StartInfo.UseShellExecute = false;
proc.StartInfo.CreateNoWindow = true;
proc.StartInfo.RedirectStandardOutput = true;
proc.StartInfo.RedirectStandardInput = true;
proc.Start();
string q = proc.StandardOutput.ReadToEnd();
proc.WaitForExit();
答案 0 :(得分:0)
从字符串到bytes
的转换将转换为ASCII。
两种转换都使用Unicode。
byte[] bytes = Encoding.Unicode.GetBytes(myString);
myString = Encoding.Unicode.GetString(bytes);