公网上是不是都教你,把数据库重新导成utf8就万事大吉了...
但是我不想。然后花了半天时间去查这问题究竟在哪里。
其实是用户不想 贴个问题图。
https://ask.csdn.net/questions/5107318
MySQL8 的 latin1 编码, 不是ISO-8859-1编码。
可以使用下列方式进行转换
Encoding iso = Encoding.GetEncoding("ISO-8859-1");
Encoding utf8 = Encoding.UTF8;
byte[] utfBytes = utf8.GetBytes(Message);
byte[] isoBytes = Encoding.Convert(utf8, iso, utfBytes);
string msg = iso.GetString(isoBytes);
C# 中的 ISO-8859-1 等价于 latin1
我们来查看一下 MySQL8的 c++ 源码中 latin1怎么写的吧。
https://github.com/mysql/mysql-server/blob/8.0/strings/ctype-latin1.cc
有些人表面上说自己是latin1 其实是cp1252.
要想使得 MySQL8 与 C# 中的 latin1 编码一致 需要使用 windows-1252 字符编码。
https://blog.csdn.net/zou8944/article/details/79859112
怎么写?饭要味道嘴里都不肯嚼一下。
Encoding cp1252 = Encoding.GetEncoding("windows-1252");
Encoding utf8 = Encoding.UTF8;
byte[] utfBytes = utf8.GetBytes(Message);
byte[] cp1252Bytes = Encoding.Convert(utf8, cp1252, utfBytes);
string msg = cp1252.GetString(cp1252Bytes);