社区
Java SE
帖子详情
utf-8编码转成GBK,难道我们真的束手无策了吗??
jinjin_hz
2003-05-25 12:02:09
我在这里搜索了几篇文章,好像都没有提供一个正确的解决方案,欢迎大家一起探讨!!
...全文
618
18
打赏
收藏
utf-8编码转成GBK,难道我们真的束手无策了吗??
我在这里搜索了几篇文章,好像都没有提供一个正确的解决方案,欢迎大家一起探讨!!
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
18 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
jinjin_hz
2003-05-27
打赏
举报
回复
感谢各位的帮助,我的问题已经解决了,不过用了其他方法,没有使用编码转换,我发现人有时候是不能钻死胡同的,也许换个思考方法,别有一番洞天,不过在解决问题过程中也确实学到了很多东西,例如有些编码的编码方式,转换方式,都是很有趣的,也谢谢各位的帮助!
有兴趣的朋友可以继续研究这个问题:描述如下:
public String utfToGbk(byte[] utf_b){
// 返回gbk字符(待Ntian
}
测试如下:byte[] utfb=new byte[2];
utfb[0]=-56;utfb[1]=-67; //这是汉字"三"的utf-8编码
String result=utfToGbk(utfb); //得到的结果应该是"三"
kknd97
2003-05-27
打赏
举报
回复
jinjin_hz(咖啡豆) :
注意,我的方法有一个前提就是,你必须得到一个标准的utf-8的字符串
这样,你能不能把你的问题,详细的说明一下。如果不是很麻烦的话
祝你好运!
jinjin_hz
2003-05-26
打赏
举报
回复
to hellking(信息孤岛):不行啊,有异常抛出
hellking
2003-05-26
打赏
举报
回复
怎么搞的这么复杂?
byte[] buf = ×××× //需要转化的东西用byte[]读进来。
String temp= new String(buf, from) //from 是你已知的编码名称。在这里是UTF8
buf = temp.getBytes(to);//to 是你要转成什么编码。 这里是GBK.
需要注意的是在把字符串读进来之前要确定该字符串绝对是utf8,读进来时一定要用inputStream 流的方式,不要用reader. 转化好之后的byte[]数组可以用outputStream写出去,但是不要再转成字符串,也不能用writer写出去。
jinjin_hz
2003-05-26
打赏
举报
回复
还是没有解决,有兴趣的可以帮我添上下面的程序
public String utfToGbk(byte[] utf_b){
// 返回gbk字符
}
测试如下:byte[] utfb=new byte[2];
utfb[0]=-56;utfb[1]=-67; //这是汉字"三"的utf-8编码
String result=utfToGbk(utfb); //得到的结果应该是"三"
seven1996
2003-05-26
打赏
举报
回复
我觉得 DataInputStream.ReadUTF();就可以阿
具体的楼主查一下类库
DataInputStream类
司码君
2003-05-26
打赏
举报
回复
return new String(new String(src,"iso8859-1").getBytes("GBK"));
这样就可以了
不要转来转去
你是一下看看
jinjin_hz
2003-05-26
打赏
举报
回复
上面两位朋友提供的方法我都尝试过了,还是不行,
而且我是需要从utf-8转到gbk,还有什么好的方法吗??
kknd97
2003-05-26
打赏
举报
回复
应当是这样的:
String gbk="你";
String utf=new String(gbk.getBytes("gb2312"),"utf-8");
System.out.println(utf);
这时候utf里面的字符都是java内核编码的字符,但是他们能够转换到标准的utf-8编码
如果这时候,你在一个以utf-8为默认编码的计算机上运行编译后的class文件,那么一定会输出 <你> 但是,如过你在windows系统下,输出一定是乱码
jinjin_hz
2003-05-26
打赏
举报
回复
kknd97(绝地风暴) :
你的方法行不通!!!!
yefc
2003-05-26
打赏
举报
回复
第三句错了,改为
String sanUTF8=new String(san.getbytes("GBK"),"UTF-8");
yefc
2003-05-26
打赏
举报
回复
String san="三";
String sanUnicode=new String(san.getBytes("GBK"));
String sanUTF8=new String(san.getBytes("UTF-8"));
kknd97
2003-05-26
打赏
举报
回复
jinjin_hz(咖啡豆):问题是这样的
String gbk="你";
String utf=new String(gbk.getBytes("gb2312"),"utf-8");//注意这时候,utf字符串
已经是一个标准的utf-8字符对照到java编码了
String tmp=new String(utf.getBytes("utf-8"),"gb2312");//注意这就是把一个utf-8映射
到gbk编码的方法。
System.out.println(tmp);//输出的肯定是 <你>
//所以如果你有一个utf-8编码的字符串,就可使用
String tmp=new String(utf.getBytes("utf-8"),"gb2312");
祝你好运!
jinjin_hz
2003-05-25
打赏
举报
回复
UTF-8 有一下特性:
UCS 字符 U+0000 到 U+007F (ASCII) 被编码为字节 0x00 到 0x7F (ASCII 兼容). 这意味着只包含 7 位 ASCII 字符的文件在 ASCII 和 UTF-8 两种编码方式下是一样的.
所有 >U+007F 的 UCS 字符被编码为一个多个字节的串, 每个字节都有标记位集. 因此, ASCII 字节 (0x00-0x7F) 不可能作为任何其他字符的一部分.
表示非 ASCII 字符的多字节串的第一个字节总是在 0xC0 到 0xFD 的范围里, 并指出这个字符包含多少个字节. 多字节串的其余字节都在 0x80 到 0xBF 范围里. 这使得重新同步非常容易, 并使编码无国界, 且很少受丢失字节的影响.
可以编入所有可能的 231个 UCS 代码
UTF-8 编码字符理论上可以最多到 6 个字节长, 然而 16 位 BMP 字符最多只用到 3 字节长.
Bigendian UCS-4 字节串的排列顺序是预定的.
字节 0xFE 和 0xFF 在 UTF-8 编码中从未用到.
下列字节串用来表示一个字符. 用到哪个串取决于该字符在 Unicode 中的序号.
U-00000000 - U-0000007F: 0xxxxxxx
U-00000080 - U-000007FF: 110xxxxx 10xxxxxx
U-00000800 - U-0000FFFF: 1110xxxx 10xxxxxx 10xxxxxx
U-00010000 - U-001FFFFF: 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
U-00200000 - U-03FFFFFF: 111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
U-04000000 - U-7FFFFFFF: 1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
xxx 的位置由字符编码数的二进制表示的位填入. 越靠右的 x 具有越少的特殊意义. 只用最短的那个足够表达一个字符编码数的多字节串. 注意在多字节串中, 第一个字节的开头"1"的数目就是整个串中字节的数目.
例如: Unicode 字符 U+00A9 = 1010 1001 (版权符号) 在 UTF-8 里的编码为:
11000010 10101001 = 0xC2 0xA9
而字符 U+2260 = 0010 0010 0110 0000 (不等于) 编码为:
11100010 10001001 10100000 = 0xE2 0x89 0xA0
这种编码的官方名字拼写为 UTF-8, 其中 UTF 代表 UCS Transformation Format. 请勿在任何文档中用其他名字 (比如 utf8 或 UTF_8) 来表示 UTF-8, 当然除非你指的是一个变量名而不是这种编码本身
jinjin_hz
2003-05-25
打赏
举报
回复
问题还是没有解决
测试例子如下:
对于字符 “三”它的UTF-8编码是11001000,10111101(状态1)
转化成Unicode是00000010,00111101(状态2)
GBK 是11001000,11111101(状态3)
我现在要从状态1转到状态3,怎么实现??
onefox
2003-05-25
打赏
举报
回复
readUTF();
muymuy
2003-05-25
打赏
举报
回复
It very easy!
byte []utf8 ;// 假设这个变量里已经存放了utf8编码的数据
String unicodeStr = new String(utf8, "utf-8");//先转换为UNICODE字符串
byte [] gbk = unicodeStr.getBytes("GBK");//转换为GBK编码数据
Smilings
2003-05-25
打赏
举报
回复
看看这个可以不?
public static final String UTF8ToGBK(byte[] src)
{
try{
return new String(new String(src,"UTF-8").getBytes("GBK"));
}
catch (UnsupportedEncodingException e )
{
System.out.println("UTF8ToDefault:"+e.getMessage());
return null;
}
}
python以某种
编码
进行打印_python2.7
编码
问题小谈
在网上可以找到很多博文,解答了python代码字符
编码
的问题,讲得都挺详细的,我这里不想再细说那些内容,而是讨论一下我感兴趣的方面。本文会涉及unicode
编码
及其程序转换格式
utf-8
、utf-16,若是对这些
编码
感兴趣,可以参看百科,里面十分详尽:另外,本文中出现的源文件代码、控制台代码、运行结果,如无特殊说明,都是在pyscripterportable2.7.3.1中编辑、运行得到的。操作系...
python xml
无聊的时候玩玩人人农场,不知不觉等级就高了,于是乎就招偷了……作为一个玩农场的程序员,不能对此
束手无策
的!写个收菜的程序吧,顺便练练Python!
研究了一下人人网的wap页面,写下了如下的代码:
Python代码 #! /usr/bin/env python #coding=
utf-8
import urllib2,urllib from xml.dom import minidom from HTMLParser import
怎么将多个php文件连接,利用PHP怎么对多个文件进行合并
利用PHP怎么对多个文件进行合并发布时间:2020-12-09 16:40:39来源:亿速云阅读:71作者:Leah利用PHP怎么对多个文件进行合并?相信很多没有经验的人对此
束手无策
,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。具体方法如下:function test(){$hostdir= iconv("
utf-8
","
gbk
","C:\Users\原万里\Desk...
从根本解决python3 open的UnicodeDecodeError: '
gbk
' codec问题
解决方案 先直截了当给出解决方案,在程序开头加上: import _locale _locale._getdefaultlocale = (lambda *args: ['zh_CN', 'utf8']) 分析 在Windows下经常用python open函数的人相信都遇到过UnicodeDecodeError: ‘
gbk
’ codec…这种
编码
问题。而且很多有经验的人应该知道解决方法是加上参...
md5加密、3-DES加密、base64
编码
、URLEncoder
编码
一、概述: 出于安全考虑,网络的传输中经常对传输数据做加密和
编码
处理,其中涉及以下几种: 1、md5加密,该加密算法是单向加密,即加密的数据不能再通过解密还原。相关类包含在java.security.MessageDigest包中。 2、3-DES加密,该加密算法是可逆的,解密方可以通过与加密方约定的密钥匙进行解密。相关类包含在javax.crypto.*包中。 3、base64
编码
,是用于传输8bit字节代码最常用的
编码
方式。相关类在sun.misc.BASE64Decoder 和sun.misc.B
Java SE
62,614
社区成员
307,327
社区内容
发帖
与我相关
我的任务
Java SE
Java 2 Standard Edition
复制链接
扫一扫
分享
社区描述
Java 2 Standard Edition
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章