相关疑难解决方法(0)

如何正确解码传递给servlet的unicode参数

假设我有:

<a href="http://www.yahoo.com/" target="_yahoo" 
    title="Yahoo!&#8482;" onclick="return gateway(this);">Yahoo!</a>
<script type="text/javascript">
function gateway(lnk) {
    window.open(SERVLET +
        '?external_link=' + encodeURIComponent(lnk.href) +
        '&external_target=' + encodeURIComponent(lnk.target) +
        '&external_title=' + encodeURIComponent(lnk.title));
    return false;
}
</script>
Run Code Online (Sandbox Code Playgroud)

我已经确认external_title将编码Yahoo!%E2%84%A2并传递给SERVLET.如果SERVLET我在做:

Writer writer = response.getWriter();
writer.write(request.getParameter("external_title"));
Run Code Online (Sandbox Code Playgroud)

我在浏览器中获得了Yahoo!¢.如果我手动将浏览器字符编码切换为UTF-8,它将更改为Yahoo! TM(这就是我想要的).

所以我认为我发送到浏览器的编码是错误的(确实如此Content-type: text/html; charset=ISO-8859-1).我改为SERVLET:

response.setContentType("text/html; charset=utf-8");
Writer writer = response.getWriter();
writer.write(request.getParameter("external_title"));
Run Code Online (Sandbox Code Playgroud)

现在浏览器字符编码是UTF-8,但它输出Yahoo!但我无法让浏览器呈现正确的字符.

我的问题是:是否存在某些组合Content-type和/或new String(request.getParameter("external_title").getBytes(), "UTF-8");和/或其他会导致Yahoo! TM出现在SERVLET输出中?

java unicode servlets

36
推荐指数
3
解决办法
9万
查看次数

为什么新的String(bytes,enc).getBytes(enc)不返回原始字节数组?

我做了以下"模拟":

byte[] b = new byte[256];

for (int i = 0; i < 256; i ++) {
    b[i] = (byte) (i - 128);
}
byte[] transformed = new String(b, "cp1251").getBytes("cp1251");

for (int i = 0; i < b.length; i ++) {
    if (b[i] != transformed[i]) {
        System.out.println("Wrong : " + i);
    }
}
Run Code Online (Sandbox Code Playgroud)

对于cp1251这个输出只有一个错误的字节 - 在位置25.
对于KOI8-R- 所有罚款.
适用于cp1252- 4或5个差异.

这是什么原因以及如何克服这个原因?

我知道在任何编码中将字节数组表示为字符串是错误的,但这是支付提供商协议的要求,所以我没有选择权.

更新:ISO-8859-1作品中代表它,我将它用于byte[]部分和cp1251文本部分,所以问题仍然只是出于好奇

java

17
推荐指数
2
解决办法
4825
查看次数

为什么Java的String.getBytes()使用"ISO-8859-1"

来自java.lang.StringCoding:

String csn = (charsetName == null) ? "ISO-8859-1" : charsetName;
Run Code Online (Sandbox Code Playgroud)

这是从Java.lang.getBytes()中使用的,在linux jdk 7中我总是认为UTF-8是默认的字符集?

谢谢

java utf-8 iso-8859-1 character-encoding

17
推荐指数
3
解决办法
4万
查看次数

如何使用RandomAccessFile读取UTF8编码的文件?

我有用UTF8编码的文本文件(用于特定于语言的字符).我需要使用RandomAccessFile来寻找特定的位置并从中读取.

我想逐行阅读.

String str = myreader.readLine(); //returns wrong text, not decoded 
String str myreader.readUTF(); //An exception occurred: java.io.EOFException
Run Code Online (Sandbox Code Playgroud)

java unicode io utf-8 textfield

13
推荐指数
2
解决办法
2万
查看次数

以1024字节的块分割Java字符串

在java中将String拆分为1024字节的块的有效方法是什么?如果存在多个块,则需要在所有后续块中重复头(固定大小的字符串).

java string byte split

7
推荐指数
2
解决办法
3万
查看次数

eclipse与tomcat部署 - 当项目在eclipse中运行时,导出的war(部分)失败

我在eclipse juno中有一个webapp - 当我在服务器上运行时运行正常 - 在eclipse的浏览器(我在Windows上)或在FF中.

右键单击> 导出war >将其转储到$ CATALINA_HOME/webapps>一切正常(解压缩好了)EXCEPT

  • 我的自定义标签 - 我有一个WEB-INF\functions.tld显然没有读过的文件.自动生成的eclipse server.xml(在Servers项目中)和默认的Tomcat 之间的唯一区别server.xml是:

    <Context docBase="ted2012" path="/ted2012" 
    reloadable="true"source="org.eclipse.jst.jee.server:ted2012"/>
    
    Run Code Online (Sandbox Code Playgroud)

source是WTP特定属性.
我设法解决了 - 看我的答案

  • Tomcat无法正确获取Url - 请参阅我的回答中的图片.

问题:

  1. (未解决)为什么Tomcat没有正确解码Url - 而eclipse呢?失败在哪里?有关调用堆栈的详细信息以及tomcat失败的位置,请参阅我的具体问题
  2. 为什么tomcat在eclipse第一时间没有看到tld?为什么我要编辑web.xml?(在我的回答中解决,应该是另一个问题)

代码在github中 - 在文件INSTRUCTIONS.txt中有详细的说明来设置项目并重现我在下面的答案中描绘的错误.

Tomcat 7.0.32,eclipse 4.2,java 1.7.9

eclipse unicode tomcat java-ee servlet-3.0

3
推荐指数
1
解决办法
1312
查看次数