昨天遇到一个中文乱码问题,发给服务器的中文字符串使用Latin1进行Encoding后数据会丢失。查了很多文章都是让服务器使用utf8,这里介绍一种客户端的解决方法。
首先对中文字符串格式化输出成2位十六进制字符,然后将这些字符组成string,新的string使用Latin1进行Encoding就不会发生数据丢失的问题了。解码的使用逆向处理所收到的数据就可以了。由于之前代码已经写了很多,许多地方使用了中文,一一修改过于繁琐,所以最终我们在读写网络数据的string类型重载函数做了一些操作,将文本进行编码与解码。由于服务器发送的ip地址之类的也会使用到string类型,所以最终我们之对发送过来的带中文的字符串进行编码与解码。
public enum ECode
{
Latin1,
ASCII,
UNICODE,
UTF_8,
UTF_7,
}
编码部分:只要有中文就进行编码
public string EncodeConvert(string inputText, ECode code)
{
if (inputText != null)
{
Regex reg = new Regex(@"[\u4e00-\u9fa5]");
if (reg.IsMatch(inputText))
{
StringBuilder builder = new StringBuilder();
by