在作一个文件上载java bean的时候出现了一个奇怪的问题
文件上载没什么问题,当<form name="form1" method="post" ENCTYPE="multipart/form-data">时读取表单<INPUT/>则需要用indexOf("name=\ "")提取出来.
如果有汉字提取的值要转换成UTF-8的格式才能识别
转换的方法是new String(fieldValue.getBytes(),"UTF-8"),
输入比较长或者是字母结尾时转换正确,没有任何问题
可是当输入比较短,或者没有字母结尾就出现部分乱码
比如"国","a国","中华人民共和国"中的"国"字都是乱码,"中华人民共和"却不是乱码
"国a"不是乱码,只要在结尾加个英文字母就正常了........
请教原因和解决办法
文件上载没什么问题,当<form name="form1" method="post" ENCTYPE="multipart/form-data">时读取表单<INPUT/>则需要用indexOf("name=\ "")提取出来.
如果有汉字提取的值要转换成UTF-8的格式才能识别
转换的方法是new String(fieldValue.getBytes(),"UTF-8"),
输入比较长或者是字母结尾时转换正确,没有任何问题
可是当输入比较短,或者没有字母结尾就出现部分乱码
比如"国","a国","中华人民共和国"中的"国"字都是乱码,"中华人民共和"却不是乱码
"国a"不是乱码,只要在结尾加个英文字母就正常了........
请教原因和解决办法
参考这个写的
部分代码
// 普通表单输入元素
// 获取输入元素名字
int pos = newLine.indexOf("name="");
String fieldName = newLine.substring(pos+6, newLine.length()-3);i = in.readLine(line, 0, 128);
i = in.readLine(line, 0, 128);
newLine = new String(line, 0, i);
StringBuffer fieldValue = new StringBuffer(128);
while (i != -1 && !newLine.startsWith(boundary)) {
// 最后一行包含换行字符
// 因此我们必须检查当前行是否是最后一行
i = in.readLine(line, 0, 128);
if ((i==boundaryLength+2 || i==boundaryLength+4)
&& (new String(line, 0, i).startsWith(boundary)))
fieldValue.append(newLine.substring(0, newLine.length()-2));
else
fieldValue.append(newLine);
newLine = new String(line, 0, i);
}
fields.put(fieldName, fieldValue.toString());//这个位置和我写的不一样,我要把fieldValue返回成UTF-8
}
}
i = in.readLine(line, 0, 128);
可以这样理解fields.put(fieldName, new String(fieldValue.toString().getBytes(),"UTF-8");
现在这里,转换成UTF-8时出问题
从什么特定类型转换到特定类型?
http://www.matrix.org.cn/resource/article/43/43954_J2EE_Multibyte_character.html
现在运行的环境,全使用的是UTF-8,服务器端,客户端都是如此.
这个问题再放一天,明天结帖