【问题标题】:Converting special German characters (umlauts) to regular UTF-8 chars将特殊的德语字符(变音符号)转换为常规 UTF-8 字符
【发布时间】:2019-09-27 11:06:02
【问题描述】:

我有一个字符串,当我通过 API 响应取回它时,它基本上看起来像这样:

Ardap Fogger � Zuverl�ssiger Vernebler Zur Ungeziefer- Und Flohbek�mpfung F

在我用 C# 转换后,字符串的最终版本应该如下所示:

Ardap Fogger – Zuverlässiger Vernebler Zur Ungeziefer- Und Flohbekämpfung F

我尝试了几种转换方法,如下所示:

public string ConvertStringToUTF8(string title)
{
    byte[] data = Encoding.Default.GetBytes(title);
    return Encoding.UTF8.GetString(data);
}

这不起作用。我也试过以下方法:

var title = System.Uri.UnescapeDataString(" Ardap Fogger � Zuverl�ssiger Vernebler Zur Ungeziefer- Und Flohbek�mpfung F");

这两种方法都会产生与输入的字符串相同的字符串。

我怎样才能把这个字符串转换成这个版本:

Ardap Fogger – Zuverlässiger Vernebler Zur Ungeziefer- Und Flohbekämpfung F

谁能帮帮我?

【问题讨论】:

  • 有人吗? =)
  • 您需要在源代码处更改编码。您的 API 服务器正在以错误的编码写入它,或者您以错误的编码读取它。如果编码错误,您以后无法更正。另外,不要使用Encoding.Default,因为这只会导致问题,因为它在不同的机器上是不同的。
  • 您的内容是如何从浏览器发送到服务器的?您是否在标头中指定内容编码?服务器以字节数组的形式接收请求男孩,并尝试使用错误的编码将它们转换为字符串。编码必须匹配。您无法“重新转换”字符串,因为原始信息已经丢失

标签: c# asp.net asp.net-mvc string utf-8


【解决方案1】:

首先你应该知道你的源代码是什么编码。很可能是德语 MS-DOS。 尝试编码页面 850:Encoding.GetEncoding(850)。此外,您的 c# 代码已经具有编码,可能是 UTF。因此,您尝试将 UTF 转换为 UTF。尝试从文件中读取。

public string ConvertStringToUTF8(string title)
{
    byte[] data = Encoding.Default.GetBytes(title);
    return Encoding.GetEncoding(850).GetString(data);
}

【讨论】:

  • 这是否适用于所有特殊字符,甚至适用于非德语字符、瑞典语、法语等?
  • @User987 可能不会,您需要知道每个文件的编码并确保为每个文件指定正确的编码。
  • 该代码页是为带有变音符号的西欧语言创建的。应该适用于大多数人
猜你喜欢
  • 2021-09-07
  • 2016-10-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多