
主要分response的字节字符输出流和request接受中文参数doGet(),doPost()的设置四种以及从服务器下载文件到浏览器的编码问题
都是我学习java时总结的,希望能帮到你
response的字节输出流:
// 设置浏览器默认打开的时候采用的字符集编码
responsesetHeader("Content-Type", "text/html;charset=UTF-8");
// 设置中文转成字节数组的时候取出的编码
responsegetOutputStream()write("如果不设置编码,这里就是乱码"getBytes("UTF-8"));
response的字符输出流:
//设置浏览器默认打开的时候采用的字符集编码,response的字符流的缓冲区的编码
responsesetContentType("text/html;charset=UTF-8");
responsegetWriter()println("中文");
request的doGet()编码解决:
String name = new String(requestgetParameter("name")getBytes("ISO-8859-1"),"UTF-8");
Systemoutprintln("GET方式:"+name);
request的doPost()编码解决:
requestsetCharacterEncoding("UTF-8");
String name = requestgetParameter("name");
Systemoutprintln("POST方式:"+name);
下载文件时浏览器编码问题:
protected void doGet(>如果直接把Java源代码复制到Eclipse中所有的中文信息都出现乱码。将文本文件的编码格式从GBK转UTF-8的方式有很多,
比较早以前我处理方式都是自己写程序,从文本文件中用GBK编码读取数据,转为String类型,然后通过UTF-8编码重新写入文本文件实现转码,现在经常使用 Apache Common 组件,用commons-iojar实现文件的
读取和写入,代码如下:
//GBK编码格式源码路径
String srcDirPath = "D:\\dev\\workspace\\masdev\\mas\\src";
//转为UTF-8编码格式源码路径
String utf8DirPath = "D:\\UTF8\\src";
//获取所有java文件
Collection javaGbkFileCol = FileUtilslistFiles(new File(srcDirPath), new String[]{"java"}, true);
for (File javaGbkFile : javaGbkFileCol) {
//UTF8格式文件路径
String utf8FilePath = utf8DirPath+javaGbkFilegetAbsolutePath()substring(srcDirPathlength());
//使用GBK读取数据,然后用UTF-8写入数据
FileUtilswriteLines(new File(utf8FilePath), "UTF-8", FileUtilsreadLines(javaGbkFile, "GBK"));
}
1、Java中,StringgetBytes(String decode)的方法,会根据指定的decode,编码返回某字符串在该编码下的byte数组表示,例如:
byte[] b_gbk = "中"getBytes("GBK");
byte[] b_utf8 = "中"getBytes("UTF-8");
byte[] b_iso88591 = "中"getBytes("ISO8859-1")
上面三行代码表示:分别返回“中”这个汉字在GBK、UTF-8和ISO8859-1编码下的byte数组表示,此时b_gbk的长度为2,b_utf8的长度为3,b_iso88591的长度为1。
2、而通过new String(byte[], decode)的方式来还原这个“中”字时,实际是使用decode指定的编码来将byte[ ]解析成字符串,例如:
String s_gbk = new String(b_gbk,"GBK");
String s_utf8 = new String(b_utf8,"UTF-8");
String s_iso88591 = new String(b_iso88591,"ISO8859-1");
s_gbk和s_utf8都是“中”,而只有s_iso88591是一个不认识 的字符,因为ISO8859-1编码的编码表中,根本就没有包含汉字字符,当然也就无法通过"中"getBytes("ISO8859-1")。
因此,通过StringgetBytes(String decode)方法来得到byte[ ]时,要确定decode的编码表中确实存在String表示的码值,这样得到的byte[ ]数组才能正确被还原。
扩展资料
java中文编码避免乱码
1、为了让中文字符适应某些特殊要求(如>
String s_iso88591 = new String("中"getBytes("UTF-8"),"ISO8859-1")
2、上述例子中的s_iso8859-1字符串实际是三个在 ISO8859-1中的字符,在将这些字符传递到目的地后,目的地程序再通过相反的方式:
String s_utf8 = new String(s_iso88591getBytes("ISO8859-1"),"UTF-8")
来得到正确的中文汉字。这样就既保证了遵守协 议规定、也支持中文。
3、StringgetBytes(String decode)方法会根据指定的decode编码返回某字符串在该编码下的byte数组表示这里是encode ,not decode,从字符串到字节数组是编码的过程,从字节数组到字符串(即 new String(byte[] , charsetname))才是解码的过程。
参考资料:
String的getBytes()方法是得到一个系统默认的编码格式的字节数组 getBytes("utf-8") 得到一个UTF-8格式的字节数组 如果你的java指定UTF-8编码则两个方法返回的数组一样。 如果你java工程是GBK的两个方法返回不同。
1读取
import javaawtFont;
import javaioFile;
import javaioFileInputStream;
public class Loadfont
{
public static Font loadFont(String fontFileName, float fontSize) //第一个参数是外部字体名,第二个是字体大小
{
try
{
File file = new File(fontFileName);
FileInputStream aixing = new FileInputStream(file);
Font dynamicFont = FontcreateFont(FontTRUETYPE_FONT, aixing);
Font dynamicFontPt = dynamicFontderiveFont(fontSize);
aixingclose();
return dynamicFontPt;
}
catch(Exception e)//异常处理
{
eprintStackTrace();
return new javaawtFont("宋体", FontPLAIN, 14);
}
}
public static javaawtFont Font(){
String root=SystemgetProperty("userdir");//项目根目录路径
Font font = LoadfontloadFont(root+"/data/PRISTINAttf", 18f);//调用
return font;//返回字体
}
public static javaawtFont Font2(){
String root=SystemgetProperty("userdir");//项目根目录路径
Font font = LoadfontloadFont(root+"/data/XXXXttf", 18f);
return font;//返回字体
}
}
2转换:
public static String ascii2native(String ascii) {
int n = asciilength() / 6;
StringBuilder sb = new StringBuilder(n);
for (int i = 0, j = 2; i < n; i++, j += 6) {
String code = asciisubstring(j, j + 4);
char ch = (char) IntegerparseInt(code, 16);
sbappend(ch);
}
return sbtoString();
}
首先理解java的字符概念
java中字符串是字符的序列,虚拟机内部的字符都是16位的unicode字符,等价于C++中的WCHAR,也是为了实现虚拟机方便
WCHAR叫做宽字符,对应的MuitiChar叫做多字符,这种多字符中字符的位数不唯一
GBK 和 UTF8 是多字符的不同编码形式
s=new String(sgetBytes("gbk"),"utf-8");
的意思是:
byte[] bytes=sgetBytes("gbk");
s=new String(bytes,"utf-8");
第一句是将s对应的gbk编码转出来,形成一个字节流
第二句是将这个字节流按照utf-8编码转为java字符串,因此相当于将gbk编码的字节流当做utf-8来使用,这样在中文中会出现乱码
你的问题是,接口返回的已经是utf-8 所以它必须是byte[] 流,如果是字符串的话就不好办了
以上就是关于Java 修改编码格式的几种方式全部的内容,包括:Java 修改编码格式的几种方式、java 将编码格式为utf-8的文件内容以 GBK编码存到txt文档、java中文乱码,能说下string.getBytes()和new String()转码是,具体点。等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)