ISO 8859(GBK) 编码文件转码到UTF-8编码文件

问题产生:

         现需要把一个在windows的Myeclipse下开发的小程序,转到Linux系统下去安装运行,结果程序中的.java文件中的中文到Linux下vim显示全是乱码。

       现做以下分析:其主要原因是windows中Myeclipse中默认的文件编码格式为GBK或GB2312格式,而Linux系统默认的文件格式是UTF-8, 这样在windows下GBK格式的中文,到Linux下vim查看中文全部显示乱码,英文正常。


解决办法:      

      1. 修改vim配置文件,使得用vim可以正常查看文件中的中文字符,但是此法并没有改变源文件的编码格式

             具体方法:找到linux系统下的vimrc文件(目录/usr/share/vim/vimrc)用root权限打开并在文件末尾添加下面四行代码:

   set fileencodings=utf-8,gb2312,gbk,gb18030

   set termencoding=utf-8

   set fileformats=unix

   set encoding=prc

              再用vim打开,就可以正常显示乱码的文件了。(记住但并未改变源文件的编码格式,只是vim读文件时自己完成了转码)

      2. 改变windows下的源码文件的编码格式为Linux下编码格式

             先说下查看文件编码格式的命令:

                (1)用vim打开文件的话可以输入 :set fileencoding 回车查看

                (2)用命令  file 文件名       例如   file  a.txt      查看a.txt 的文件编码格式

             然后就是具体的转码操作:

                   Linux可以用iconv命令进行文档的转码操作,具体命令格式:

                                   iconv -f GBK -t UTF-8  待转码文件名  -o  输出文件名

                    解释下此命令,其中  -f 接的是代转文件编码格式(即被转码格式)  -t  接的是目标文件编码格式(即目标编码格式)

                    -o  表示输出。上面完成了  将待转码文件(GBK编码格式) 转换成 输出文件(UTF-8编码格式) ,也就是完成了从GBK到UTF-8的转换。(提示:要想转码后不产生新文件,把代转文件名和输出文件名写成同一个就行了)

                    举例:iconv   -f   ISO-8859  -t  UTF-8   zhuan.java   -o   zhuan.java

                      


        













### 回答1: 假设使用Spring MVC框架,可以在controller层的参数中使用@RequestBody注解,如下所示: ``` @RequestMapping(value = "/postJsonData", method = RequestMethod.POST) public void postJsonData(@RequestBody String jsonStr, HttpServletRequest request, HttpServletResponse response) throws UnsupportedEncodingException { //将GBK编码的json字符串UTF-8编码的字符串 String utf8JsonStr = new String(jsonStr.getBytes("ISO-8859-1"), "UTF-8"); //解析json字符串 JSONObject jsonObj = JSONObject.parseObject(utf8JsonStr); //TODO:其他业务逻辑 } ``` 在上面的代码中,@RequestBody注解表示接收请求的JSON数据,并将其转换为String类型的jsonStr。由于请求中的JSON使用GBK编码,需要先将其转码ISO-8859-1编码,再转码UTF-8编码,代码如下所示: ``` String utf8JsonStr = new String(jsonStr.getBytes("ISO-8859-1"), "UTF-8"); ``` 接下来可以使用fastjson等库将json字符串解析为JSONObject或JavaBean进行操作。 ### 回答2: 在Spring的Controller层接收并转换来自对方发送的使用GBK字符集的JSON,可以通过以下步骤实现: 1. 首先,需要在Controller的方法参数中添加`@RequestBody`注解,该注解表示接收请求体中的JSON数据。 2. 在接收到请求后,Spring会将JSON数据转换成Java对象。由于JSON使用了GBK字符集,需要对接收到的JSON数据进行解码。 3. 使用`@RequestMapping`注解来映射请求路径。例如: ```java @RequestMapping(value = "/receiveJson", method = RequestMethod.POST) public void receiveJson(@RequestBody byte[] requestBody) { try { String jsonStr = new String(requestBody, "GBK"); // 将接收到的JSON数据使用GBK字符集解码成字符串 // 将字符串转换UTF-8编码格式 byte[] utf8Bytes = jsonStr.getBytes("UTF-8"); String utf8JsonStr = new String(utf8Bytes, "UTF-8"); // 将转换后的UTF-8编码的JSON字符串转换成Java对象 ObjectMapper objectMapper = new ObjectMapper(); YourObject yourObject = objectMapper.readValue(utf8JsonStr, YourObject.class); // 处理接收到的对象 // ... } catch (UnsupportedEncodingException | JsonProcessingException e) { // 处理异常 // ... } } ``` 以上代码示例中,`receiveJson`方法使用了`@RequestBody`注解来接收请求体中的JSON数据。首先将接收到的JSON数据使用GBK字符集解码成字符串,然后将字符串转换UTF-8编码格式。接着,使用`ObjectMapper`类将转换后的UTF-8编码的JSON字符串转换成Java对象,最后可以对该对象进行处理。 ### 回答3: 在Spring的Controller层接收到对方使用HTTP发来的GBK字符集的JSON数据后,我们需要进行以下步骤来将其转换UTF-8编码的Java代码示例。 首先,在Controller方法的参数列表中添加@RequestBody注解,并指定参数类型为String。这样Spring将会自动将HTTP的请求体中的数据转换成String类型的变量。 接下来,我们需要手动将接收到的GBK编码的字符串转换UTF-8编码的字符串。可以使用Java内置的编码转换方法来实现。具体示例代码如下: ```java import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RestController; import java.io.UnsupportedEncodingException; @RestController public class MyController { @PostMapping("/convert") public String convertToUTF8(@RequestBody String gbkJson) { // 将接收到的GBK编码的字符串转换UTF-8编码的字符串 try { byte[] gbkBytes = gbkJson.getBytes("GBK"); String utf8Json = new String(gbkBytes, "UTF-8"); return utf8Json; } catch (UnsupportedEncodingException e) { e.printStackTrace(); // 异常处理逻辑 } return null; } } ``` 以上示例代码中,我们先使用getBytes方法将接收到的GBK编码的字符串转换成字节数组。然后使用String构造函数将该字节数组按UTF-8编码转换成Java中的字符串。 最后,我们可以根据业务需求返回转换UTF-8编码的字符串或执行其他逻辑操作。 需要注意的是,示例中使用了try-catch块来处理可能产生的UnsupportedEncodingException异常,并在出现异常时进行适当的处理。 请根据实际情况进行适当的修改和调整,以满足您的具体需求。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值