Java编码问题解析:常见乱码错误及解决方案
java问题
1.最基本的乱码问题。这个乱码问题是最简单的乱码问题。
通常会出现新的。
是由于页面编码不一致导致的乱码。
<%@pagelanguage="java"pageEncoding="UTF-8"%><%@pagecontentType="text/html;charset=iso8859-1"%><html><head><title>中文问题</title>
首先的编码格式是jsp文件的存储格式。
Ecljpse会按照这个编码格式保存文件。
并编译jsp文件,包括里面的汉字。
第二个编码是解码格式。
因为保存为UTF-8的文件解码为iso8859-1,如果有中文,肯定会乱码。
这意味着它必须保持一致。
第二名所在的线不需要在那里。
默认编码格式也是ISO8859-1。
所以如果没有这一行,“乱码问题”也会出现乱码。
它必须是一致的。
第三种编码是控制浏览器的解码方式。
如果之前的解码一致且正确,则编码格式并不重要。
有些网页出现乱码是因为浏览器无法确定使用哪种编码格式。
由于页面有时会嵌入页面,浏览器会混淆编码格式。
出现乱码。
2、使用Post方法提交表单后收到乱码的问题也是常见问题。
这个乱码也是tomcat内部编码格式iso8859-1导致的。
也就是说,post提交的时候,如果没有设置提交的编码格式,就会以iso8859-1的方式提交,但是接受的jsp会以utf-8的方式接受。
。
导致出现乱码。
为此,这里给出几种解决方案和比较。
A)接受参数时,进行编码转换Stringstr=newString(request.getParameter("something").getBytes("ISO-8859-1"),"utf-8");在这种情况下,每个参数都必须以这种方式转换代码。
很麻烦。
但确实可以得到汉字。
B)在请求页面的开头,执行请求编码代码request.setCharacterEncoding("UTF-8"),将提交内容的字符集设置为UTF-8。
在这种情况下,接受该参数的页面不需要进行转码。
直接使用Stringstr=request.getParameter("something");获取汉字参数。
但这句话需要在每个页面都执行。
该方法仅对post提交有效,但在提交文件和上传文件时对enctype="multipart/form-data"无效。
下面分别对这两个乱码进行解释。
C)为了避免每个页面都要写request.setCharacterEncoding("UTF-8"),建议使用过滤器对所有jsps进行编码。
网上有很多这样的例子。
请您亲自检查一下。
3.表单get提交方法出现乱码如何处理。
如果使用get方法提交中文,接受参数的页面也会出现乱码。
出现这个乱码的原因也是tomcat内部编码格式iso8859-1导致的。
Tomcat会使用get默认的编码方式iso8859-1对汉字进行编码,编码后追加到URL中,导致从页面接收到的参数/和乱码。
解决方案:A)使用上例中的第一种方法对接收到的字符进行解码,然后进行转码。
B)Get使用url提交,在输入url之前已经进行了iso8859-1编码。
如果想影响这种编码,需要在服务器的Connector节点添加useBodyEncodingForURI="true"属性配置。
8")按照设置的编码格式进行编码,因此自动编码为utf-8,受理页面可以正常受理。
但我认为真正的编码过程是tomcat必须基于
如果从URL获取编码,则接收页面根据URIEncoding="UTF-8"进行解码。
4、解决上传文件时出现乱码的问题。
上传文件时,表单设置均为enctype="multipart/form-data"。
这样文件就以流的方式提交。
如果你使用apach的上传组件,你会发现很多乱码。
这是因为apache早期的commons-fileupload.jar有bug,把汉字取出来解码。
因为该方法提交后,编码自动使用tomcat的默认编码格式iso-8859-1。
然而乱码的问题是:句号、逗号等特殊符号变成乱码。
如果汉字数量为奇数,就会出现乱码。
如果是偶数,则解析正常。
解决方案:下载commons-fileupload-1.1.1.jar。
这个版本的jar已经解决了这些错误。
但是,在提取内容时,仍然需要将提取的字符从iso8859-1转码为utf-8。
可以得到所有正常的汉字和字符。
5、关于url请求,Java代码接受参数,乱码url的编码格式取决于上面提到的URIEncoding="UTF-8"。
如果设置了这种编码格式,则意味着URL中的所有汉字参数都必须进行编码。
否则获取到的汉字参数值是乱码,比如一个链接Response.sendDelect("/a.jsp?name=张大伟");而在a.jsp中,直接使用Stringname=request.getParameter("name");明白这只是胡言乱语。
因为规定必须是utf-8,所以这个重定向应该这样写:Response.sendDelect("/a.jsp?name=URLEncode.encode("张大伟","utf-8");。
如果不设置这个参数URIEncoding=“UTF-8”会发生什么情况?如果不设置,就会使用默认的编码格式iso8859-1问题又出现了。
如果参数值的个数是奇数,那么就可以正常解析,如果弄成偶数,就会得到最后的字符乱码。
解析正常,但中文标点符号仍然乱码。
解决方法是,如果你的参数中没有中文标点符号,可以在参数值的末尾添加英文符号来解决乱码问题。
拿到参数后,去掉这个最后的符号,也可以组合或者使用6.关于url请求,如果接收到的参数是乱码的话,脚本也会控制页面重定向,也会涉及到附加的参数。
并解析接收页面的参数。
如果这个汉字参数不是URIEncoding="UT进行"F-8"指定的编码处理的话,接收页面接收到的汉字也是乱码,通过脚本处理编码很麻烦,必须有一个对应的编码脚本对应的文件,然后调用脚本中的方法对汉字进行编码7.关于MyEclipse中打开jsp的乱码问题,对于一个已有的项目来说,Jsp文件的存储格式可能是utf-。
8.如果是新安装的eclipse,默认使用的编码格式是iso8859-1,所以很容易造成jsp出现乱码问题,解决方法是:直接到eclipse3.1的首选项中找到general->edidor,将你的文件的打开编码设置为utf-8。
Eclipse将自动以新的编码格式重新打开它。
8.关于html页面。
在eclipse中打开,出现乱码,是因为大部分页面是用Dreamweaver制作的,它们的存储格式与Eclipse的识别不一样造成的。
一般来说,这种情况下,在Eclipse中新建一个JSP,直接从Dreamweaver中复制页面内容粘贴到JSP中。
学生必看Java常见的错误及避免方法
常见的Java错误以及如何避免这些错误
1....“预期”
当代码中缺少某些内容时,就会出现此错误。
这通常是由于缺少分号或右括号造成的。
此错误消息通常不会指示问题的确切位置。
要查找错误:确保所有左括号都有匹配的右括号。
在查看指定行的Java代码之前先查看该行。
eJava软件中的这个错误只有在深入挖掘代码之前才会被编译器检测到。
有时一个字符,例如左括号,不应该放在Java代码的原始位置。
这样,设计者就没有阻止右括号平衡括号。
2.“UnlinedStringLiteral”
如果字符串文字不带引号结尾,则会显示“UnlinedStringLiteral”错误消息生成的消息与错误显示在同一行。
文字是值的源代码,这种情况会发生:字符串文字没有被引用。
可以通过添加必要的引号来括住字符串文字来轻松修复
字符串文字可以拆分为字符串文字,并且添加到它们的加号(“+”)不会被反斜杠(“”转义))。
3.“illegalStartofanExpression”
导致“IllengalStartofanExpression”错误的原因有很多,这就是为什么它被认为是最无用的错误消息之一。
开发人员甚至认为这是由错误的代码引起的。
通常创建表达式是为了生成新值或为变量赋值,编译器期望找到一个表达式,但找不到它,因为。
语法不是它所期望的。
这个错误可以在这些语句中找到。
4.“CannotFindSymbol”
Java中所有标识符在使用前都必须声明。
出现该错误是因为编译器在编译代码时不理解标识符的含义。
您可能收到“CannotFindSymbol”消息的原因有很多:
·声明标识符时的拼写在代码中使用时可能会有所不同。
这个变量从来没有宣布。
当在同一作用域中使用和声明变量时,不会导入类。
5.“PublicClassXXXShouldBeinFile
当XXX类与Java程序文件名不匹配时,”会出现PublicClassXXXShouldBeinFile消息。
仅当类Code与Java文件相同时才会被编译:解决此问题:确保两个名称相同。
“不兼容类型”是指尝试执行语句时发生的逻辑错误。
将变量与类型表达式关联起来。
通常在代码尝试将文本字符串装入整数时发生,反之亦然。
这不是Java语法错误。
当编译器抛出“不兼容类型”消息时,无法通过简单的修复来修复:。
有一些函数可以转换类型。
开发人员可能需要更改代码的预期功能。
7.“InvalidMethodDeclaration;ReturnTypeRequired
此Java软件错误消息表明方法的返回类型未在方法签名中显式声明。
有多种方法会导致该错误”nalidMethod
Declaration;ReturnTypeRequired”:忘记声明类型
如果方法没有返回值,则在方法签名中您必须声明类型“void”。
构造函数名称不必声明类型。
但是,如果构造函数出现错误。
名称,那么编译器会将其视为没有指定类型的方法
8.“Method
这表明方法签名调用了错误的参数。
被调用的方法需要方法声明中定义的某些参数。
检查方法声明并仔细调用它们确保它们兼容。
9.“MissingReturnStatement”
当方法没有返回语句时,会出现一条消息。
“MissingReturnStatement”每个返回值(除void之外的类型)的方法都必须有一个从字面上返回该值的语句,以便可以在方法外部调用它。
编译器会发出消息“MissingReturnStatement”。
“.”有几个原因:返回语句被省略
该方法没有返回任何值,但没有声明类型void。
方法签名
10“可能的精度损失
当分配附加信息时。
a如果变量超出其容量,将出现消息“PossibleLossPrecision”。
如果发生这种情况,碎片将被丢弃。
如果这并不重要,则必须在代码中将变量显式声明为新类型。
“PossibleLossofPrecision”通常发生在以下情况:尝试将实数分配给整数数据变量。
type尝试将双精度值分配给整数数据类型变量