js iso-8859-1转UTF-8

pp24417620 2010-05-25 03:57:32
JS文件接收过来的中文路径被编译成“ISO-8859-1”代码;我想把它转成“UTF-8”;或者转成中文;请问要怎么做?
...全文
1670 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
wcwtitxu 2010-05-27
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 pp24417620 的回复:]
你好!我现在是想改FCKeditor的编码。FCKeditor的视频教程如下:
http://www.phpme.info/index.php/view_116_198.html
你可以观看下视频9、10、11;
但是还是存在一个问题,就是引用中文目录里边的文件时,文件路径里边的中文目录显示为乱码,这个要如何解决呢?个人觉得用UUID的方法还是治标不治本的,关键还是让其支持中文,看了一下,/fckeditor/editor/filemanager/browser/default/frmresourceslist.html里边的function openfile();函数 ,让它的文件路径支持中文编码,但是我不知道怎么修改,希望指教!
[/Quote]


URI 是容器自动解码, tomcat 默认是按 iso-8859-1

其中 pathname 部分,跟 querystring 部分不一样, 在 servlet 响应前,就已经由容器自动解码并使用了. (要不然怎么把 request 传到 servlet)

--------------------------------------

可以通过 修改 server.xml 中 connector 的 URIEncoding 来解决.

视频中也有提出了这个方案. 但建议不使用
(
因为容器可能部置有多个不同应用,而所用的编码不同. 修改server.xml是会影响同服务器的其它项目的
而且实际中应用中,很多时候,开发人员并没有权限去控制容器的配置
)

--------------------------------------

视频中使用了 UUID 命名文件的方法. 这确实没有正面解决中文 pathname 的问题.
是一种回避的策略. uri 中 pathname 部分仍然不能使用中文.
但还是一种比较推荐的方案.


---------------------------------------

如果你一定要用多字节字符做文件名, 也不想修改 server.xml 的话,
你可以建一个 servlet 拦截接收指定目录下的所有请求. 然后自行截取 uri 中的 pathname 部分.
再使用数据流方式推送到客户端.
( 过滤器也可以,但在过滤器中直接给客户端响应,会破坏过滤链 )


<!--
/web-inf/web.xml 配一个过滤器
用来拦截 /userfiles/image/ 下的所有请求
-->
<servlet>
<servlet-name>FixPathName</servlet-name>
<servlet-class>cn.ialvin.servlet.FixPathName</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>FixPathName</servlet-name>
<url-pattern>/userfiles/image/*</url-pattern>
</servlet-mapping>




package cn.ialvin.servlet;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.net.URLEncoder;
import java.util.regex.Pattern;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class FixPathName extends HttpServlet {
private static final long serialVersionUID = 1L;

public void service(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String actionPath = request.getRequestURI();
actionPath = actionPath.replaceFirst("^" + Pattern.quote(request.getContextPath()), "");
actionPath = java.net.URLDecoder.decode(actionPath, "UTF-8");

// System.out.println(actionPath);

File file = new File(this.getServletContext().getRealPath(actionPath));
if (!file.exists()) {
response.sendError(404);
return;
}

response.setContentType("*/*");
response.setCharacterEncoding("UTF-8");
response.addHeader(
"Content-Disposition",
"attachment; filename=" + URLEncoder.encode(file.getName(), "UTF-8")
);

FileInputStream in = new FileInputStream(file);
OutputStream out = response.getOutputStream();
byte[] bytes = new byte[64*1024];
int c;
while ((c = in.read(bytes)) > 0) {
out.write(bytes, 0, c);
out.flush();
}
out.close();
}
}


minglois 2010-05-26
  • 打赏
  • 举报
回复
MARK
pp24417620 2010-05-26
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 zitian666 的回复:]
java.net.URLDecoder.decode(value, "UTF-8"); //java中的 转码
decode(value, "UTF-8");//js中的 转码
不知你要那种
[/Quote]
试了一下,JS的有语法错误啊
fztjava 2010-05-26
  • 打赏
  • 举报
回复
js escape()
luodinga 2010-05-26
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 fucunzhan 的回复:]
整个项目使用utf-8, 另外在web。xm中增加一个过滤器就可以
[/Quote]

.
hepeng_8 2010-05-26
  • 打赏
  • 举报
回复
GET的话,中文确实编码是ISO-8859-1
POST的话,应该是UTF-8
Z_FEI 2010-05-26
  • 打赏
  • 举报
回复
不知道楼主是不是在jsp中导入js?如果是的话,可以试试这个:
<script type="text/javascript" src="tmp.js" charset="GBK"></script>
浪漫江湖 2010-05-26
  • 打赏
  • 举报
回复
在小脚本中加入这句话。
request.setCharacterEncoding("UTF-8");
fucunzhan 2010-05-26
  • 打赏
  • 举报
回复
整个项目使用utf-8, 另外在web。xm中增加一个过滤器就可以
pp24417620 2010-05-26
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 liuch1026 的回复:]
楼主为什么要到出现问题时才解决呢,先将他们统一编码后,这些问题就很难出现了。
[/Quote]
哥,我也很纳闷,因为我都是用UTF-8编码的,从来没出现过ISO8859-1的东西,但是就是出现了问题
你可能没用过FCKeditor吧?
dengweiyan 2010-05-26
  • 打赏
  • 举报
回复
我觉得也是,你就都弄成UTF-8就行了
liuch1026 2010-05-26
  • 打赏
  • 举报
回复
楼主为什么要到出现问题时才解决呢,先将他们统一编码后,这些问题就很难出现了。
pp24417620 2010-05-26
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 wcwtitxu 的回复:]
%C3%A5%C2%A4%C2%A7%C3%A5%C2%AE%C2%B6%C3%A5%C2%A5%C2%BD
%A5 %A4 %A7 %A5 %AE %B6 %A5 %A5 %BD

------
表面上看就是 UTF-8 的 URI, 被间插了 %C3 或者 %C2


像自定义的了方法

建议贴出编码的函数出来
[/Quote]
你好!我现在是想改FCKeditor的编码。FCKeditor的视频教程如下:
http://www.phpme.info/index.php/view_116_198.html
你可以观看下视频9、10、11;
但是还是存在一个问题,就是引用中文目录里边的文件时,文件路径里边的中文目录显示为乱码,这个要如何解决呢?个人觉得用UUID的方法还是治标不治本的,关键还是让其支持中文,看了一下,/fckeditor/editor/filemanager/browser/default/frmresourceslist.html里边的function openfile();函数 ,让它的文件路径支持中文编码,但是我不知道怎么修改,希望指教!
wcwtitxu 2010-05-26
  • 打赏
  • 举报
回复
%C3%A5%C2%A4%C2%A7%C3%A5%C2%AE%C2%B6%C3%A5%C2%A5%C2%BD
%A5 %A4 %A7 %A5 %AE %B6 %A5 %A5 %BD

------
表面上看就是 UTF-8 的 URI, 被间插了 %C3 或者 %C2


像自定义的了方法

建议贴出编码的函数出来


pp24417620 2010-05-26
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 minglois 的回复:]
MARK
[/Quote]
什么意思啊
  • 打赏
  • 举报
回复
你就统一成utf-8
zitian666 2010-05-25
  • 打赏
  • 举报
回复
java.net.URLDecoder.decode(value, "UTF-8"); //java中的 转码
decode(value, "UTF-8");//js中的 转码
不知你要那种
pp24417620 2010-05-25
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 stl0 的回复:]
这要看你的传递方法是get还是post了,

GET的话,中文确实编码是ISO-8859-1
POST的话,应该是UTF-8

在action里面,首先获取请求URI,然后转码,不可以么
[/Quote]
你好,这样说的话就是ISO-8859-1编码了,JS有没有方法把ISO-8859-1转成UTF-8呢?
谢谢你!
stl0 2010-05-25
  • 打赏
  • 举报
回复
这要看你的传递方法是get还是post了,

GET的话,中文确实编码是ISO-8859-1
POST的话,应该是UTF-8

在action里面,首先获取请求URI,然后转码,不可以么
pp24417620 2010-05-25
  • 打赏
  • 举报
回复
或许我不确定是否是“ISO-8859-1”编码,中文“大家好”被译成“%C3%A5%C2%A4%C2%A7%C3%A5%C2%AE%C2%B6%C3%A5%C2%A5%C2%BD”,而“大家好”的"UTF-8"的编码是“%E5%A4%A7%E5%AE%B6%E5%A5%BD”;其实我这个问题是为了解决FCKeditor图片路径选择中文文件夹里边的文件时,中文文件夹在路径里边被译成了上述乱码,非常苦恼,望高手相助

81,092

社区成员

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

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