无法显示葡萄牙语/ UTF-8字符

时间:2018-11-07 10:33:04

标签: c# unicode character-encoding

我有一个包含字符“á”和“ã”的字符串,并且不显示它们。 “ã”将显示为“Æ”,而不会出现“á”。 我在这里经历了很多关于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();

1 个答案:

答案 0 :(得分:0)

从字符串到bytes的转换将转换为ASCII。 两种转换都使用Unicode。

byte[] bytes = Encoding.Unicode.GetBytes(myString);
myString = Encoding.Unicode.GetString(bytes);