一般的 乱码 ,百度 就和很多 的解决办法了。 总之 乱码的 出现 总的 原因是 : 编码的时候 使用 一种 字符集, 解码的时候 使用 另一种 字符集。 不要 想着 使用一种 办法 或者 是 一段代码 ,把 所有的中文乱码 问题 都解决掉。 就是 要 知道 编码的时候 使用的是 什么 字符集, 解码的时候,我们使用 一样的 字符集即可。 这样的 办法 对于其他语言来说都是 适用的。
下面是 我遇到的 一种,让我比较郁闷的 方式,花费了 我比较多的 精力:
public static String sendPostRequest(String path,String param) throws IOException {
String sendUrlString=path+param;
URL url = new URL(sendUrlString);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
//设置post方式请求
conn.setRequestMethod("POST");
//conn.setRequestProperty("Accept-Charset", "utf-8");
//conn.setRequestProperty("contentType", "utf-8");
conn.setRequestProperty("Content-type", "application/x-java-serialized-object");
//设置传入参数
conn.setDoOutput(true);
//传入参数
//conn.getOutputStream().write(param.toString().getBytes());
// 解决中文乱码, 在 Linux 下没有乱码,本地有 ,估计 Linux 已经 帮我们转码了一次了。
// 而且 Linux 下 的默认编码并没有 和 本地的一致,比如tomcat的啊, 系统的啊,没有 该为 默认中文的等。
// 既然这样 在 Linux 下没有 乱码,可以不用管,如果以后 可以 去 修改 服务器里面的 编码。
BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream()));
// 解决中文乱码,在 Linux 下有乱码,本地没有
//BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream(),"GBK"));
String readingString= "";
// 读取完所有内容
String readl=null;
while (( readl=reader.readLine() )!=null) {
readingString=readingString+readl;
readl=null;
}
return readingString;
}
就是 这样奇怪, 本地 和 服务器 运行的 时候 获取的 中文有乱码, 使用 的 不同 办法 即可。 就是这样 郁闷,我一直想着 统一 起来,不要 让 某个 环境 下面乱码。
参考 地址: 其他网友给我的 启发, 这样子的话, tomcat 或者是 nginx 都是需要配置的 统一字符集的。 原来的设置:
LANG="en_US.UTF-8" SYSFONT="latarcyrheb-sun16" 现在改为: LANG="zh_CN.UTF-8" SYSFONT="latarcyrheb-sun16" 然后再运行,通过日志分析,其form表单 post提交过来的数据不再乱码。但是,存入到mysql数据库表中的数据是乱码,问题依然没有解决,于是,到/etc/下,打开my.cnf文件,修改3处地方: [client] port = 3306 socket = /var/lib/mysql/mysql.sock default-character-set=utf8 2、在[mysqld]字段里加入character-set-server=utf8,如下: [mysqld] port = 3306 socket = /var/lib/mysql/mysql.sock character-set-server=utf8 3、在[mysql]字段里加入default-character-set=utf8,如下: [mysql] no-auto-rehash default-character-set=utf8 修改完成后,标红的地方是我加的。service mysql restart重启mysql服务就生效