如何在 C# 中正确 encode/decode 西班牙重音字符
How to correctly encode/decode Spanish accented characters in C#
在我的 C# WinForms 应用程序中,我从 C/C++ DLL 获取回调消息。这些字符串在 Wireshark 中看起来像这样:
“c33mo”
当我在 RichTextBox 中显示它们时,它们看起来像这样:
然而,实际上它应该是这样的:
同
所以我尝试了这个但它不起作用,其中 'txt' 是输入字符串:
byte[] bytes = Encoding.Default.GetBytes(txt);
byte[] converted = Encoding.Convert(Encoding.Default, Encoding.UTF8, bytes);
txt = System.Text.Encoding.UTF8.GetString(converted);
我不知道进来的文本的编码是什么,但是 Wireshark 说:
基于行的文本数据:text/html(1 行)。
此外,当我在回调中获得此文本时,我将其检索为 msg.htmlBody(没有其他方式)。
所有这些让我认为它也与 HTML 编码有关...
知道我应该如何处理才能显示“cómo”吗?
好的...问题是您的 C/C++ dll 是罕见的 C/C++ dll 之一,而不是使用标准 Windows“Ansi”编码使用 utf8...干杯...遗憾的是 .NET 认为它正在使用 Windows“Ansi”编码...干杯(这是讽刺)...
所以你必须扭转已经造成的“伤害”...不能保证伤害可以恢复,这取决于你的Encoding.Default
,但是如果你使用的是Windows -1252(你可能是西班牙人,对吧?)应该可以简单地:
string txt = "cómo";
byte[] bytes = Encoding.Default.GetBytes(txt);
string txt2 = System.Text.Encoding.UTF8.GetString(bytes);
“完美”的解决方案是更改 pinvoke“配置”,但您使用的是 Swig,这本身就是一个地狱(我很高兴不知道这个地狱)
在我的 C# WinForms 应用程序中,我从 C/C++ DLL 获取回调消息。这些字符串在 Wireshark 中看起来像这样: “c33mo”
当我在 RichTextBox 中显示它们时,它们看起来像这样:
然而,实际上它应该是这样的:
同
所以我尝试了这个但它不起作用,其中 'txt' 是输入字符串:
byte[] bytes = Encoding.Default.GetBytes(txt);
byte[] converted = Encoding.Convert(Encoding.Default, Encoding.UTF8, bytes);
txt = System.Text.Encoding.UTF8.GetString(converted);
我不知道进来的文本的编码是什么,但是 Wireshark 说: 基于行的文本数据:text/html(1 行)。 此外,当我在回调中获得此文本时,我将其检索为 msg.htmlBody(没有其他方式)。 所有这些让我认为它也与 HTML 编码有关...
知道我应该如何处理才能显示“cómo”吗?
好的...问题是您的 C/C++ dll 是罕见的 C/C++ dll 之一,而不是使用标准 Windows“Ansi”编码使用 utf8...干杯...遗憾的是 .NET 认为它正在使用 Windows“Ansi”编码...干杯(这是讽刺)...
所以你必须扭转已经造成的“伤害”...不能保证伤害可以恢复,这取决于你的Encoding.Default
,但是如果你使用的是Windows -1252(你可能是西班牙人,对吧?)应该可以简单地:
string txt = "cómo";
byte[] bytes = Encoding.Default.GetBytes(txt);
string txt2 = System.Text.Encoding.UTF8.GetString(bytes);
“完美”的解决方案是更改 pinvoke“配置”,但您使用的是 Swig,这本身就是一个地狱(我很高兴不知道这个地狱)