⑴ java 中的五角星转换成unicode码
(Stringstr){
char[]myBuffer=str.toCharArray();
StringBuffersb=newStringBuffer();
轿激for(inti=0;i<str.length();i++){
UnicodeBlockub=梁帆贺UnicodeBlock.of(myBuffer[i]);
if(ub==UnicodeBlock.BASIC_LATIN){
//英文及数字等
sb.append(myBuffer[i]);
}elseif(ub==UnicodeBlock.HALFWIDTH_AND_FULLWIDTH_FORMS){
//全角半角字符
intj=(int)myBuffer[i]-65248;
sb.append((char)j);
}else{
橡派//汉字
shorts=(short)myBuffer[i];
StringhexS=Integer.toHexString(s);
Stringunicode="\"+'u'+hexS;
sb.append(unicode.toLowerCase());
}
}
returnsb.toString();
}
⑵ java中Unicode码的转换
private static String decode(char[] in) throws Exception {
int off = 0;
char c;
char[] out = new char[in.length];
int outLen = 0;
while (off < in.length) {
c = in[off++];
if (c == '\\') {
if (in.length > off) { // 是否有下一个字符
c = in[off++]; // 取出下一个字符
} else {
out[outLen++] = '\\'; // 末字符为'\',返回
break;
}
if (c == 'u') { // 如果是"\\u"
int value = 0;
if (in.length > off + 4) { // 判断"\\u"后边是否有四个字符
boolean isUnicode = true;
for (int i = 0; i < 4; i++) { // 遍历四个字符
c = in[off++];
switch (c) {
case '0':
case '1':
case '2':
case '3':
case '4':
case '5':
case '6':
case '7':
case '8':
case '9':
value = (value << 4) + c - '0';
break;
case 'a':
case 'b':
case 'c':
case 'd':
case 'e':
case 'f':
value = (value << 4) + 10 + c - 'a';
break;
case 'A':
case 'B':
case 'C':
case 'D':
case 'E':
case 'F':
value = (value << 4) + 10 + c - 'A';
break;
default:
isUnicode = false; // 判断是否为unicode码
}
}
if (isUnicode) { // 是unicode码转换为字符
out[outLen++] = (char) value;
} else { // 不是unicode码把"\\uXXXX"填入返回值
off = off - 4;
out[outLen++] = '\\';
out[outLen++] = 'u';
out[outLen++] = in[off++];
}
} else { // 不够四个字符则把"\\u"放入返回结果并继续
out[outLen++] = '\\';
out[outLen++] = 'u';
continue;
}
} else {
switch (c) { // 判断"\\"后边是否接特殊字符,回车,tab一类的
case 't':
c = '\t';
out[outLen++] = c;
break;
case 'r':
c = '\r';
out[outLen++] = c;
break;
case 'n':
c = '\n';
out[outLen++] = c;
break;
case 'f':
c = '\f';
out[outLen++] = c;
break;
default:
out[outLen++] = '\\';
out[outLen++] = c;
break;
}
}
} else {
out[outLen++] = (char) c;
}
}
return new String(out, 0, outLen);
}
⑶ java中 unicode编码转换成UTF-8,请前辈指点,谢谢
看来你手里有这个代码喽。
我从来没仔细研究过具体如何转换的,只是知道,如果java里String str = 什么什么; 能够取到str值了,那么此时的str一定为unicode了,转换的时候一般用在输出上。
&是按位与,就是每一个二进制位分别对应进行与操作。
|是按位或,就是每一个二进制位分别对应进行或操作。
⑷ java中如何在中文字符和unicode编码之间进行转换
可以这样来重构字符串new String(“XXX".getByte(),”UTF-8“);后面加上编码方式
⑸ java使用unicode为默认编码是什么意思
java初学者都会接触到一个概念,既java的默认编码是uincode,但书上也就出现这句话而已,究竟是什么意思就没再说。其实对于一个程序员来说,一个平台的编码方式是不用了解的,因为这是他内部处理字符的方式,和我们顶层设计程序是没有多大关系(如果真要说有关系的话,一个就是你对这个平台的熟悉程度,另一个就只能是你要处理的字符奇葩到要考虑编译器有没有包括这个字符)。但这并不是指我们在编程的时候完全不用考虑编码问题,恰恰相反,编码问题是跨系统交流的基本。
那java哪里会用到编码问题呢?最常见的是流,下面有两个例子。1.在linux下用java创建了一个文件(这里默认代码里没有指定编码),里面包括英文和中文,然后在windows下同样用java读取这个文件,并输出,结果中文出现了乱码;2.android手机和电脑的两个java程序进行类似qq的信息交流,中文都是乱码。疑惑来了,java不是跨平台吗,而且默认编码就是unicode,为什么会有编码? 正如上面所说,java的系统编码是管理内部变量等信息的,是统一不能变的,但上面两个例子出现乱码的原因在于这些字符信息是从外界读取的,编码方式直接影响到字符的显示,比如gbk一个字符是1或2个字节,中文是2个,而utf8是1到4个字节不定,中文是3个,utf16是2个字节固定不变,所以很明显了,同样字节数的源信息可以每2个或者每3个字节表达一个中文,不同编码当然不同了,而且即使gbk和utf16都是两个字节表示一个中文,同样的二进制也对应不同的字符。所以从外部读取到这些byte信息后,就要指定编码,比如new
String(byte[],charset),当然,也可以在构建流的时候就指定,像new
InputStreamReader(InputStream,charset)等,但像BufferedReader等没有相应的构造函数,就只能把上面的InputStreamReader作为参数了。
总结:
1.String和流(包括控制台的输出输入)的默认编码是根据系统而定,即jvm假设这些信息是当前系统创建的,windows默认中文是gbk,linux和mac是utf8(这里又来了,utf8和unicode是什么意思,简单地说,unicode是把每个字符和一个唯一的二进制码对应的标准,而utf是unicode
transformation
format,即如何表示每个唯一的二进制码,utf8,utf16和utf32是不同的编码方式);
2.IDE设置的编码方式用于存取java源文件,对于在不同系统平台上共享代码很重要;
3.java编译器采用utf8,即class文件的存储是用utf8,因为相对于utf16,utf8在处理英文占用内存小,而程序大部分都是英文;
4.jvm运行时的编码方式是utf16,即jvm用utf8从class文件读取程序后再转化为utf16编码的字符串,因为utf16是2个字节,统一的长度更方便jvm申请数组等操作;
5.网页大部分是用utf8编码的,在html头几行有charset的信息,在对下载下来的网页进行解析时,要注意编码,谷歌网络在对搜索结果的解析时也是用utf8的,所以在涉及到网络时编码问题非常重要,本人曾经栽得很惨,当然了,谁叫windows的编码不是utf8;
6.不知大家有没有经历过,如果编码弄错了,一般只有中文会出现乱码,而中文后面的英文是正确的,不合理啊,这不是类似多骨诺米牌吗,一个错了,后面不是全倒吗。所以别小看那些制定编码的专家,像utf8每个字节的前几位都用来表示一些信息,不同字节还不一样,而utf16也有,所以弄出了utf16le和utf16be
⑹ 关于UTF-8编码转换为汉字的
UTF-8变成压缩编码的,转换起来比拍数裂较复杂.
我写袭闭过一个函数,可以实现这个功能:
CString UTF8toUnicode(char* s)
{
int len = 0;
WCHAR* r = new WCHAR[strlen(s) * 2];
while(s[0])
{
int bytes = 1;
if(s[0] & 0x80)
while(s[0] & (0x80 >毕丛> bytes)) bytes++;
if(bytes == 1)
r[len] = s[0];
else
{
r[len] = 0;
for(char*p = s + (bytes - 1); p > s; p--)
r[len] |= ((*p) & 0x3F) << ((bytes - (p - s) - 1) * 6);
r[len] |= (s[0] & ((1 << (7 - bytes)) - 1)) << ((bytes - 1) * 6);
}
len++;
s += bytes;
}
r[len] = 0;
char*buffer = new char[len * 2 + 1];
ZeroMemory(buffer, len * 2 + 1);
::WideCharToMultiByte(CP_ACP, NULL, r, len, buffer, 1+ 2 * len, NULL, NULL);
CString str = buffer;
Delete[] r;
delete[] buffer;
return str;
}
另外,如果要省事,直接用Windows自带的记事本另存为就能转了
⑺ java怎么把UTF-8里面的汉字转成Unicode
string.getbytes("ISO646-US")
Unicode当然是一个很大的集合,现在的规模可以容纳100多万个符号。每个符号的编码都不一样,比如,U+0639表示阿拉伯字雹衫好母Ain,U+0041表示英语的大写字母A,“汉”这个字的Unicode编码是U+6C49。
Unicode固然统一了编码方式,但是它的效率不高,比如UCS-4(Unicode的标准之一)规定用4个字节存储一个符号,那么每个英文字母前都必然有三塌含个字源铅节是0,这对存储和传输来说都很耗资源。
⑻ java怎么设置utf8
服务器端
修改数据库配置文件/etc/my.cnf
character-set-server=utf8mb4
collation_server=utf8mb4_unicode_ci
重启MySQL(按照官方文答培档,这两个选项都是可以动态设置的,但是实际的经验是Server必须重启一下)
已有的表修改编码为utf8mb4
ALTER TABLE
tbl_name
CONVERT TO CHARACTER SET
charset_name;
使用下面这个语句只是修改了表的default编码
ALTER TABLE table_name CONVERT TO CHARACTER SET utf8mb4;
客户端
jdbc的连接字符串不支持utf8mb4,这个 这种方式 来解决的,如果服务器端设置了character_set_server=utf8mb4,则客户端会自动将传过去的utf-8视作清和唯utf8mb4。
Connector/J did not support utf8mb4 for servers 5.5.2 and newer.
Connector/J now auto-detects servers configured with character_set_server=utf8mb4 or treats the Java encoding utf-8 passed using characterEncoding=... as utf8mb4 in the SET NAMES= calls it makes when establishing the connection. (Bug #54175)
其他的client端,比如php、python需要看下client是否支持,如果不能在连接字符串中指定的话,可以在获取连接之后,执行”set names utf8mb4″来解决这个问题;
因为utf8mb4是utf8的超集,理论上即使client修改字符集为utf8mb4,也会不棚滑会对已有的utf8编码读取产生任何问题。
⑼ java中“utf-8”编码的转义字符应该怎么转换成中文
String str = new String("暗示大家答腊猛".getBytes(),"UTF-8");x0dx0a重新用utf-8编码x0dx0ax0dx0a或局颂者用清桥x0dx0aURLDecoder.decode("xxxxxx", "UTF-8");重新用utf-8解码
⑽ java怎么把UTF-8字符串转成GBK字符串
java不同编码之间进行转换,都需要使用unicode作为中转。
以utf-8转gbk为例,示例代码如下:
Stringt="这是一个字符串aaa111";
Stringutf8=newString(t.getBytes("UTF-8"));
System.out.println(utf8);
Stringunicode=newString(utf8.getBytes(),"UTF-8");
System.out.println(unicode);
Stringgbk=newString(unicode.getBytes("GBK"));
System.out.println(gbk);