-
Java转码问题5
String str = "你好";
byte[] byteGBK = str.getBytes("GBK");
String str1 = new String(byteGBK,"UTF-8");
System.out.println( str1 );
// 这个时候str1会显示成乱码
// 开始我写成
byte[] tmpUTF8 = str1.getBytes("UTF-8");
String str2 = new String(tmpUTF8,"GBK");
System.out.println( str2 );
// 这个时候 str2 还是乱码
//需求是我现在只能够拿到 str1,应该如何装换才能不是乱码,或者说,如果从str1中取得 没有污染的 byte[]
问题补充:场景是这样的,是我没说清楚。
我是使用别人的二方库,另一个系统里使用GBK编码将一个很大的字符串用GBK编码的方式写入文件中,这个系统提供的二方库的类方法在通过byte[]转换为String的时候,没有提取编码方式,直接toString()了,我系统机器的编码方式是UTF-8,我临时的解决方法是继承了二方库中的类,重写了它的方法,从技术角度想了解了 有没有可能 在已经获得str1的情况下,获取原来的byte[]
2012年11月07日 10:39
6个答案 按时间排序 按投票排序
-
采纳的答案
这种实现是不可能的。
主要是你通过GBK得到的字节,然后再用UTF-8去转换的话。
除非你的字节刚好在UTF-8编码的范围里面。
0XXX XXXX
---------
110X XXXX
10XX XXXX
---------
1110 XXXX
10XX XXXX
10XX XXXX
---------
1111 0XXX
10XX XXXX
10XX XXXX
10XX XXXX
---------
1111 10XX
10XX XXXX
10XX XXXX
10XX XXXX
10XX XXXX
---------
1111 110X
10XX XXXX
10XX XXXX
10XX XXXX
10XX XXXX
---------
如果你用GBK解码得到的字节组合不在以上的组合里,那么你这个字节对应的UTF-8的字符会变成一个特殊的,然后再通过UTF-8解码的话就无法解析回去了。都会映射到那个特殊字符的编码。这样字节已经丢失。
有的时候这种你转换可行是因为某种编码生成的字节刚好再另外一种编码的字节范围内。那么字节不会丢失。这样就可以逆转换回来。2012年11月08日 12:23
-
楼主对编码的基本知识看来还是有待补充哦。
JVM里都是采用UTF-16编码的。
String str = "你好";
byte[] byteGBK = str.getBytes("GBK");
这两句的意思是将jvm内部UTF-16的字符编码转换成GBK编码的字节数组。
String str1 = new String(byteGBK,"UTF-8");
System.out.println( str1 );
而这两句你又将是GBK编码的字节数组当做UTF-18来解码,自然会是乱码。
其实你理解了编码的原理就不会有疑问了,可以看我的博客,可以解决你的疑惑:http://singleant.iteye.com/blog/6863832012年11月08日 13:53
-
你把这两个方法的意思完全都理解错了,getBytes和new String(encoding)不是用来转码的。
String str = "你好";
byte[] byteGBK = str.getBytes("GBK");
是说用GBK的编码对"你好"进行编码,编码成byte数组
String str1 = new String(byteGBK,"UTF-8");
是说用UTF-8的编码对刚才的byte数组进行解码成字符串
一个GBK编码的字节数组用UTF-8去解码肯定是乱码嘛2012年11月07日 18:19
-
String newName = new String(parameterValue.getBytes(System.getProperty("file.encoding")), "UTF-8");
试试这个哈。2012年11月07日 17:51
-
System.out.println(byteGBK.length);
System.out.println( byteGBK[0]+" " +byteGBK[1]+" " +byteGBK[2]+" " +byteGBK[3]+" " );
System.out.println(tmpUTF8.length);
System.out.println( tmpUTF8[0]+" " +tmpUTF8[1]+" " +tmpUTF8[2]+" " +tmpUTF8[3]+" " );
你输出看看就明白了...
byte[] byteGBK = str.getBytes("UTF-8");
String str1 = new String(byteGBK,"UTF-8");
这里获取byte数组的编码和new的编码要一致的2012年11月07日 15:17
-
你确定str1是GBK编码?有没有可能是GB2312,或者说本来就是UTF-8?
看看这里http://simlee.iteye.com/blog/431611能否帮到你。2012年11月07日 11:45
相关推荐
### Java转码工具类知识点详解 #### 一、概述 在Java开发中,经常会遇到不同编码格式的文件处理问题,特别是在处理国际化应用时,字符集的兼容性尤为重要。本篇文章介绍了一个Java批量转换文件编码的工具类——`...
这篇名为“java转码”的博客文章可能讨论了Java中处理字符编码转换的各种方法。在Java中,主要涉及以下知识点: 1. `Charset` 类:Java的`java.nio.charset`包提供了一个`Charset`类,它代表一种字符集,如UTF-8或...
Java转码工具是一种基于Java语言开发的实用程序,主要用于处理字符编码问题,特别是将文本文件在GB2312和UTF-8编码格式之间进行转换。在计算机领域,字符编码是决定如何用二进制数据表示字符的标准,不同的编码方式...
在这个场景下,"java转码代码"指的是用于解决Java程序中遇到的乱码问题的代码段,而"ISOtoGbk.java"可能是一个源代码文件,专门用于将遵循ISO-8859-1编码的字符转换为GBK编码。 GBK是中文环境下广泛使用的字符编码...
在Java开发环境中,我们可以利用阿里云提供的SDK来实现视频的转码操作。下面将详细介绍如何使用Java代码进行视频转码,并探讨相关的技术要点。 首先,要进行视频转码,你需要在阿里云上创建一个Media Processing ...
在Java开发中,视频上传、转码、截图和播放是常见的功能需求,尤其在构建多媒体应用或者在线视频平台时。以下是对这些知识点的详细说明: 1. **Java视频上传**: - **文件I/O操作**:Java中的`java.io`包提供了...
本文通过对给定示例代码的分析,展示了如何在Java程序中实现从UTF-8到GBK或其他编码的转换,同时也指出了示例代码中存在的问题,并给出了相应的修改建议。 #### 五、参考资料 1. **Oracle官方文档**:[Character ...
java转码amr,jar包
针对“JAVA 视频转码及上传”的主题,我们将深入探讨其中的关键知识点。 首先,我们来了解一下**视频转码**。转码是指将视频文件从一种编码格式转换为另一种编码格式的过程,通常涉及到视频编解码器、分辨率、...
h264转码MP4 支持html5播放格式 示例代码: H264TrackImpl h264TrackImpl = new H264TrackImpl(new FileDataSourceImpl("C://a.264")); Movie movie = new Movie(); movie.addTrack(h264TrackImpl); Container ...
同时,由于版权和性能问题,可能需要对转码过程进行适当的优化,例如动态调整编码参数,以平衡质量与文件大小的关系。 综上所述,JAVA实现的视频转码到FLV及截图功能,涉及到了多媒体处理的核心技术,包括视频编码...
Java结合FFmpeg进行视频和音频转码是一种常见的技术实践,特别是在多媒体处理和流媒体服务中。FFmpeg是一款强大的跨平台命令行工具,用于处理各种音视频格式,包括转码、剪辑、合并等操作。而Java则提供了一个稳定的...
在Java开发中,音频文件转码是一项常见的任务,特别是在多媒体应用、音频处理或者网络音频传输等领域。本项目基于Jave开源框架,它提供了一个高效且易于使用的API来处理音频编码和解码工作。Jave(Java Audio Video ...
java使用ffmpeg实现视频转码
【Java上传视频和转码的编程思路】 在Java中实现视频上传、转码和播放功能,需要考虑以下几个关键点: 1. **视频上传**: - 用户通过网页上传视频文件时,HTML表单的`enctype`属性应设置为`multipart/form-data`...
在Java开发中,处理视频相关的任务,如上传、转码、截图和播放,是一项常见的需求。这个项目似乎提供了一个完整的解决方案,涵盖了这些功能,并且整合了数据库管理。下面将详细阐述这些关键知识点。 1. **视频上传*...
Java作为一种广泛使用的编程语言,提供了丰富的库和工具来处理视频转码。本资源聚焦于利用Java进行视频转码,帮助开发者实现不同视频格式之间的转换。 "java视频转码"这个主题涉及到的关键技术主要包括以下几个方面...
在这个场景中,"jave-1.0.2.jar" 是核心的Java转码库文件,它包含了实现视频转码功能的类和方法。开发者可以通过导入这个jar包到他们的项目中,然后调用相关的API来进行视频转码操作。这个库可能支持多种视频和音频...
java 音频转码工具类
《AudioCore:Java音频转码与播放的利器》 在当今数字时代,音频处理成为多媒体应用不可或缺的一部分。Java作为广泛使用的编程语言,自然也需要强大的音频处理能力。AudioCore,一个基于FFmpeg的Java音频转码库,...