Java 修改编码格式的几种方式

Java 修改编码格式的几种方式,第1张

主要分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))才是解码的过程。

参考资料:

百度百科-UTF-8

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()转码是,具体点。等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/9526431.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-29
下一篇2023-04-29

发表评论

登录后才能评论

评论列表(0条)

    保存