我已经尝试使用Google搜索,但是无法找到下面这段文字所属的字符集:
具有éœé›»ç”¢ç”Ÿè£ç½®ä¹‹å½±åƒè¼¸å…¥è£ç½®
但是将<meta http-equiv="Content-Type" Content="text/html; charset=utf-8">
放入该字符串并保存到HTML文件中后,我便能够正确地查看中文字符:
具有静电产生装置之影像输入装置
所以我的问题是:
更新:
为了完整起见,我已经更新了此测试。
[TestMethod]
public void TestMethod1()
{
string encodedText = "具有éœé›»ç”¢ç”Ÿè£ç½®ä¹‹å½±åƒè¼¸å…¥è£ç½®";
Encoding utf8 = new UTF8Encoding();
Encoding window1252 = Encoding.GetEncoding("Windows-1252");
byte[] postBytes = window1252.GetBytes(encodedText);
string decodedText = utf8.GetString(postBytes);
string actualText = "具有靜電產生裝置之影像輸入裝置";
Assert.AreEqual(actualText, decodedText);
}
}
谢谢。
最佳答案
当您在带有meta标签声明正确编码的文本文件中保存“坏”字符串时发生了什么情况,这是因为您的文本编辑器正在使用Windows-1252编码保存文件,但是浏览器正在读取文件并将其解释为UTF -8。由于使用Windows-1252编码错误地将“坏”字符串解码为UTF-8字节,因此您正在通过将文件编码为Windows-1252并解码为UTF-8来逆转该过程。
这是一个例子:
using System.Text;
using System.Windows.Forms;
namespace Demo
{
class Program
{
static void Main(string[] args)
{
string s = "具有靜電產生裝置之影像輸入裝置"; // Unicode
Encoding Windows1252 = Encoding.GetEncoding("Windows-1252");
Encoding Utf8 = Encoding.UTF8;
byte[] utf8Bytes = Utf8.GetBytes(s); // Unicode -> UTF-8
string badDecode = Windows1252.GetString(utf8Bytes); // Mis-decode as Latin1
MessageBox.Show(badDecode,"Mis-decoded"); // Shows your garbage string.
string goodDecode = Utf8.GetString(utf8Bytes); // Correctly decode as UTF-8
MessageBox.Show(goodDecode, "Correctly decoded");
// Recovering from bad decode...
byte[] originalBytes = Windows1252.GetBytes(badDecode);
goodDecode = Utf8.GetString(originalBytes);
MessageBox.Show(goodDecode, "Re-decoded");
}
}
}
即使解码正确,您仍然需要一种支持所显示字符的字体。如果您的默认字体不支持中文,则可能仍看不到正确的字符。
正确的做法是弄清楚为什么首先将您拥有的字符串解码为Windows-1252。但是,有时候,数据库中的数据存储不正确,因此您必须借助这些游戏来解决问题。
关于c# - 如何编码和解码残破的中文/Unicode字符?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10967786/