相关疑难解决方法(0)

request.getQueryString()似乎需要一些编码

我有一些UTF-8的问题.我的客户端(在GWT中实现)向我的servlet发出请求,URL中有一些参数,如下所示:

http://localhost:8080/servlet?param=value
Run Code Online (Sandbox Code Playgroud)

当我在servlet中检索URL时,我遇到了UTF-8字符的问题.我用这个代码:

protected void service(HttpServletRequest request, HttpServletResponse response) 
                    throws ServletException, IOException {

        request.setCharacterEncoding("UTF-8");

        String reqUrl = request.getRequestURL().toString(); 
        String queryString = request.getQueryString();
        System.out.println("Request: "+reqUrl + "?" + queryString);
        ...
Run Code Online (Sandbox Code Playgroud)

所以,如果我打电话给这个网址:

http://localhost:8080/servlet?param=così
Run Code Online (Sandbox Code Playgroud)

结果是这样的:

Request: http://localhost:8080/servlet?param=cos%C3%AC
Run Code Online (Sandbox Code Playgroud)

如何正确设置字符编码?

servlets utf-8 character-encoding query-string

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

为什么新的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中的查询字符串操作

有没有人知道或者我知道可以用来操作查询字符串的java类?

基本上我想要一个类,我可以简单地给一个查询字符串,然后删除,添加和修改查询字符串KVP.

提前致谢.

编辑

在回答对此问题的评论时,查询字符串将看起来像这样;

N=123+456+112&Ntt=koala&D=abc
Run Code Online (Sandbox Code Playgroud)

所以我想把这个类传递给查询字符串并说出类似的内容.

String[] N = queryStringClass.getParameter("N");
Run Code Online (Sandbox Code Playgroud)

然后也许吧

queryStringClass.setParameter("N", N);
Run Code Online (Sandbox Code Playgroud)

有可能 queryStringClass.removeParameter("N");

或者那种效果.

java string

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

在java中使用request.getParameter()时为什么字符被破坏?

我在JSP页面中有这样一个链接,编码为big5 http:// hello/world?name =婀ㄉ 当我在浏览器的URL栏中输入它时,它将被改为 http:// hello/world?name = %23%24%23 当我们想在jsp页面中获取此参数时,所有字符都已损坏.

我们设置了这个:request.setCharacterEncoding("UTF-8"),因此所有请求都将转换为UTF8.

但为什么在这种情况下,它不起作用?提前致谢!.

java request character-encoding

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

ISO-8859-1编码和二进制数据保存

我在评论中读到@Esailija对我的一个问题的回答

ISO-8859-1是唯一完全保留原始二进制数据的编码,具有精确的字节< - >代码点匹配

我也在@AaronDigulla的回答中读到:

在Java中,ISO-8859-1(又名ISO-Latin1)是1:1映射

我需要对此有所了解.这将失败(如图所示这里):

// \u00F6 is ö
System.out.println(Arrays.toString("\u00F6".getBytes("utf-8")));
// prints [-61, -74]
System.out.println(Arrays.toString("\u00F6".getBytes("ISO-8859-1")));
// prints [-10]
Run Code Online (Sandbox Code Playgroud)

问题

  1. 我承认我不太明白 - 为什么它没有得到上面代码中的字节
  2. 最重要的, 指定的(字节保留行为ISO-8859-1)在哪里 - 链接到源,或者JSL会很好.它是唯一具有此属性的编码吗?
  3. 这是否与ISO-8859-1作为默认默认

另请参阅此问题以获取其他字符集中的反例.

java iso-8859-1 character-encoding

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

request.getParameter()在java servlet中没有正确显示字符编码

我在java servlet文件中遇到UTF-8的问题.当我在URL中获取参数值时,我遇到了UTF-8字符的问题.它无法正确显示日文字符.

Jsp头已经有了

<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
Run Code Online (Sandbox Code Playgroud)

我在连接器中将URIEncoding设置添加到server.xml中的UTF-8.

<Connector URIEncoding="UTF-8" connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443"/>
Run Code Online (Sandbox Code Playgroud)

我在jsp中编写了以下代码.

<s:textfield key="txt_name" name="txt_name" id="txt_name"
maxlength="64"></s:textfield>

<a href="javascript:showModalWindow('PopUpFile!init.action?<%=Common.PASSWORD%>=<%=Common.encript(ID, Code)%>','',940,650);">
<s:property value="PopUp Link" />
</a>

<script>
    function showModalWindow(x_URL, x_ARG, x_WIDTH, x_HEIGHT) {
        var x_OPT = "dialogHeight: " + x_HEIGHT + "px; " + "dialogWidth: "
                + x_WIDTH + "px; "
                + "edge: Raised; center: Yes; resizable: Yes; status: Yes;";
        x_URL += "&name="+document.getElementById("txt_name").value;
        var retValue = window.showModalDialog(x_URL, x_ARG, x_OPT);
        if (retValue …
Run Code Online (Sandbox Code Playgroud)

java jsp servlets struts2 character-encoding

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

Tomcat的"URIEncoding",编码过滤器和request.setCharacterEncoding有什么区别?

可能有很多方法可以解决编码问题:

今天,我遇到的问题是路径参数不能很好地解码

@ResponseBody
@RequestMapping(value="/context/method/{key}",method=RequestMethod.GET,produces = "application/json;charset=utf-8")
public String method(@PathVariable String key){

    logger.info("key="+key+"------------");
}
Run Code Online (Sandbox Code Playgroud)

我可以看到密钥被解码坏了!如果我"??"从前端传出一个字,它就会变成"æ°æµª".我编写以下代码来检查服务器是否使用"ISO-8859-1"对其进行解码:

public static void main(String args[]) throws UnsupportedEncodingException{
    String key="??";
    byte[] bytes=key.getBytes("UTF-8");
    String decode=new String(bytes,"ISO-8859-1");
    System.out.println(decode);
}
Run Code Online (Sandbox Code Playgroud)

它出来的输出相同"æ°æµª".实际上,路径变量用ISO-8859-1解码.

然后我尝试添加一个过滤器web.xml来解决这个问题:

  <filter>
    <filter-name>encodingFilter</filter-name>
    <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
    <init-param>
        <param-name>encoding</param-name>
        <param-value>UTF-8</param-value>
    </init-param>
    <init-param>
        <param-name>forceEncoding</param-name>
        <param-value>true</param-value>
    </init-param>
 </filter>

  <filter-mapping>
    <filter-name>encodingFilter</filter-name>
    <url-pattern>/*</url-pattern>
 </filter-mapping> 
Run Code Online (Sandbox Code Playgroud)

但是同样的乱码.

直到我在下面设置我的 server.xml

<Connector connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443"
           URIEncoding="UTF-8" useBodyEncodingForURI="true"   ----Here is Added
/> …
Run Code Online (Sandbox Code Playgroud)

java encoding spring tomcat utf-8

6
推荐指数
1
解决办法
6906
查看次数

通过AJAX发布时字符编码错误

我有一个带有一些编码问题的Struts2应用程序.我的JSP页面显示2个表单; 当我发送第一个(一个简单的常规表单,重新加载整页),非标准字符,如áñ正确发送和显示.然而,当我做的第二形式(其通过AJAX发送)是相同的,该数据被破坏(Ãí,Ã!等等).

main.jsp中:

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<%@ page language="java" contentType="text/html;charset=UTF-8" pageEncoding="UTF-8" %>
<%@ taglib prefix="s" uri="/struts-tags" %>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    ...
    <s:head theme="ajax"/>
</head>
<body>
    <!-- This form is sent via regular HTTP request -->
    <s:form theme="simple" enctype="multipart/form-data">
        <s:textfield key="field1" name="var1"/>
        <s:submit key="send" action="SAVE_ACTION"/>
    </s:form>
    <div id="ajaxContainer">
         <jsp:include file="ajax-part.jsp"/>
    </div>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)

Ajax的part.jsp

<%@ page language="java" contentType="text/html;charset=UTF-8" pageEncoding="UTF-8" %>
<%@ taglib prefix="s" …
Run Code Online (Sandbox Code Playgroud)

ajax dojo encoding struts2 utf-8

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

Java servlet sendRequest - getParameter编码问题

我正在使用java servlet为我的课程构建一个Web应用程序.在某些时候,我想重定向到一个jsp页面,发送一些想要在那里使用的信息(使用GET方法).在我的servlet中,我有以下代码:

String link = new String("index.jsp?name="+metadata.getName()+"&title="+metadata.getTitle());

response.sendRedirect(response.encodeRedirectURL(link));
Run Code Online (Sandbox Code Playgroud)

在jsp中,我使用了这些参数

<%
request.getParameter("name");
request.getParameter("title");
%>
Run Code Online (Sandbox Code Playgroud)

一切正常,除非参数不包含拉丁字符(在我的情况下,它们可以包含希腊字符).例如,如果name =ΕΡΕΥΝΑΣ我得到名字=¡¥.如何解决此编码问题(将其设置为UTF-8)?是不是encodeRedirectURL()做这个工作?我应该在某个时候使用encodeURL()吗?我尝试了最后一个,但问题仍然存在.

提前致谢 :)

java encoding servlets character-encoding getparameter

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

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
查看次数

如何在网址中转义#符号?

我在URL中有#个符号作为参数传递。但是它将丢弃#之后的所有参数值。请给我建议。以下是我的网址

GetConnectiont?   
  customerID=customer1&activenode=Sv50&parent=server&frame=imHealthCheckFrame&
connectedFrom=healthCheck&username=root&password=anil#1234&fromAskUsrPwd=askPassword
Run Code Online (Sandbox Code Playgroud)

提前致谢

javascript java jquery jsp servlets

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