又见乱码,url写成文件

mush_me 2009-06-14 02:56:17
简单描述下问题
需要将url生成静态页面
服务器是 apache+tomcat 乱码都处理过了,包括web.xml里的设置,过滤器的设置,apache转发的设置。
整个系统不存在页面显示的乱码问题。
如果是以上问题的回答,请不要回答。

现在的问题是,需要将一个地址转换成html文件,已便于其它程序(一个邮件订阅系统)使用。


import java.io.BufferedReader;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.Writer;
import java.net.MalformedURLException;
import java.net.URL;

public class UrlToHtml {
public static void main(String[] args) {
String content = readUrlContent("http://www.investide.cn/edm/index.do");
//http://www.investide.cn/edm/index.do用的是gbk编码
try{
content = new String(content.getBytes(), "GBK");
System.out.println(content);
if (!(writeFile(content, "/home/mush/1.html")))
{
System.out.println("文件生成失败");
}
}catch(Exception e){
e.printStackTrace();
}
}
public static String readUrlContent(String url)
{
StringBuffer sb = new StringBuffer();
try
{
String strLine;
URL urlObj = new URL(url);
InputStream streamObj = urlObj.openStream();
InputStreamReader readerObj = new InputStreamReader(streamObj,"GBK");
BufferedReader buffObj = new BufferedReader(readerObj);
while ((strLine = buffObj.readLine()) != null)
sb.append(strLine + "\r");
buffObj.close();
} catch (MalformedURLException e) {
System.err.println("url error");
} catch (IOException e) {
System.out.println("IO error");
}
return sb.toString();
}

public static boolean writeFile(String str, String filePath) {
boolean result = true;
try {
//FileWriter fw = new FileWriter(filePath);
Writer fw = new OutputStreamWriter(new FileOutputStream (filePath),"GBK");
fw.write(str);
fw.close();
} catch (IOException e) {
result = false;
System.out.println("写文件失败");
}
return result;
}
}


开始程序在本地运行没有任何问题,放到服务器上后,生成的文件就会乱码,然后加了几处乱码处理(见三处GBK编码),仍然显示时乱码。
服务器用的是redhat,i18n文件已设置过GBK编码。
...全文
56 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
mush_me 2009-06-15
  • 打赏
  • 举报
回复
问题已经解决,是linux默认编码的问题。
在.bashrc里设置了下默认的编码,就可以了。
i18n里的好像没有生效,改了还要重启,最后决定改.bashrc。

哎,都说了,过滤器什么的回答就不要回了,还是有人回。
结贴散分。
douchog_13k 2009-06-15
  • 打赏
  • 举报
回复
你看建个sevlet进行过滤行不行,
我前几天也遇到了一个编码问题,用下面的方法解决了
import java.io.IOException;
import javax.servlet.*;

public class SetCharactorEncodingFilter implements Filter {
public void destroy() {
}
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain)throws IOException, ServletException {

request.setCharacterEncoding("GBK");
chain.doFilter(request, response);
}

public void init(FilterConfig filterConfig) throws ServletException {
}
}
XML code
<filter>
<filter-name>Set Character Encoding</filter-name>
<filter-class>cn.ac.sict.ietd.util.SetCharactorEncodingFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>Set Character Encoding</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>


这是我前几天发的帖子
http://topic.csdn.net/u/20090612/10/cf98ee5d-388c-4400-9503-1d3620842e1d.html
mush_me 2009-06-15
  • 打赏
  • 举报
回复
刚执行了下locale,才发现系统用的是ansi,那个汗啊。
myairland说的好像也对,程序已经改好,放上去了,晚上更新下看看。
希望可以明天就可以结贴了。
myairland 2009-06-15
  • 打赏
  • 举报
回复
InputStreamReader readerObj = new InputStreamReader(streamObj,"GBK");

content = new String(content.getBytes(), "GBK");

感覺你好像轉了兩次碼,你用的是中文系統吧?content.getBytes()不指定編碼的話,默認用的是系統編碼.

readUrlContent返回的就是string,為什麼要再轉碼再生成string呢?如果content只有經過轉碼才能正確顯示的話,那證明你的readUrlContent讀出來的就是亂碼啊
xuyan87101 2009-06-15
  • 打赏
  • 举报
回复
呵呵,帮顶了……
mush_me 2009-06-14
  • 打赏
  • 举报
回复
编码是遗留问题了。
用了gbk了,改起来比较麻烦了。
包括数据库,redhat系统,tomcat都用的gbk。
“使用utf-8,远离乱码”这个道理我也清楚,只是现在不好实现了。
kokobox 2009-06-14
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 mush_me 的回复:]
能处理的地方都处理过了,不明白为什么还有问题。
望指教。。。
[/Quote]

以前用URL做接口的时候遇到过类似的情况。

全部都用UTF-8编码。把GBK都改为utf-8

mush_me 2009-06-14
  • 打赏
  • 举报
回复
能处理的地方都处理过了,不明白为什么还有问题。
望指教。。。

13,100

社区成员

发帖
与我相关
我的任务
社区描述
Java J2ME
社区管理员
  • J2ME社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧