为什么我得到responseText(通过Ajax从Servlet到javaScript)和额外的字符
why i am getting responseText(From Servlet to javaScript through Ajax) with extra charaters?
我正在一个项目中工作。在其中,我试图从使用以下代码创建的会话中获取用户名:-
GetCurrentUserInfo.java
package servlet;
import java.io.IOException;
import java.io.ObjectOutputStream;
import java.io.OutputStream;
import java.util.Vector;
import javax.servlet.ServletConfig;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class GetCurrentUserInfo extends HttpServlet
{
ServletContext contx = null;
public void init(ServletConfig config) throws ServletException
{
contx = config.getServletContext();
}
public void doPost(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException
{
try
{
OutputStream outer = res.getOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(outer);
String userName = (String) req.getSession().getAttribute("username");
oos.writeChars(userName);
oos.flush();
oos.close();
}
catch (Throwable e)
{
e.printStackTrace();
}
}
}
调用.js
function getUserInfo()
{
var userInfoHttp;
if (window.XMLHttpRequest)
{
userInfoHttp = new XMLHttpRequest()
}
else if (window.ActiveXObject)
{
userInfoHttp = new ActiveXObject("Microsoft.XMLHTTP")
}
userInfoHttp.open("POST", "GetCurrentUserInfo", false);
userInfoHttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
userInfoHttp.onreadystatechange = function ()
{
if (userInfoHttp.readyState == 4)
{
if (userInfoHttp.status == 200)
{
var res = TrimString(userInfoHttp.responseText);
alert(res);
}
}
}
userInfoHttp.send(null);
isAnnotationUpdate = false;
}
我想我得到的用户名有一些额外的字符,比如:-"���w�s�@�s�.�c�o�m"实际上,我的用户名仅为s@s.com。
我认为有两件事可以解决的编码问题
首先使用OutputStreamWriter并赋予其编码值
OutputStream stream = response.getOutputStream();
OutputStreamWriter writer = new OutputStreamWriter(stream, "UTF-8");
String userName=(String)req.getSession().getAttribute("username");
writer.write(userName);
writer.flush();
然后确保您的响应具有正确的编码
response.setCharacterEncoding("UTF-8");
相关文章:从servlet 下载文件客户端时出现意外字符
更新
还有一些我忘在原来的答案里了。将响应对象的ContentTyoe设置为text/plain,因为实际返回的是纯文本字符
response.setContentType("text/plain");
相关文章:
- 在JavaScript中输出转义字符
- 使用箭头键移动javascript字符
- Javascript 6字符和空格检查
- JavaScript 字符 (£) 不显示,而是显示“”
- 什么是默认的 JavaScript 字符编码
- JavaScript字符,单词和空格计数函数
- firefox中的javascript字符计数器
- 用于文本输入的Javascript字符限制计数器函数
- 通过邮寄发送的字符串的Javascript字符限制
- JavaScript字符串子类化问题
- 分割javascript字符与特定的领先和落后的字符
- Javascript字符限制-暂时显示无效字符
- JSF 2.0/Facelets——JavaScript字符被编码为html实体
- Javascript字符转换
- asp.net mvc-带参数的Javascript字符计数器功能
- Drupal更改Javascript字符集并删除元素
- 计算推特的Javascript字符数的最佳方式
- 转义 u200b(零宽度空格)和其他非法的 JavaScript 字符
- javascript字符计数器上的目标类
- Javascript字符码是否与所有或某些浏览器兼容