原帖由
于
2009-3-9
17:22
发表
[i][/url]项目右键属性,第一页源右边就有编码设置
[/b]不用项目。就直接打开一个文件。。但是没在项目里。是不是没办法?
首先,我们看getBytes(); JDK文档注释为:
Returns a new byte array containing the characters of this string encoded using the system's default charset
即根据系统的默认编码方式,返回一个byte数组,byte和char一样吗,显然不一样。下面我们测试一下不同字符集,getBytes()的行为。
以下是我运行的结果,我的系统是linux,字符串就是你的哈哈哈:
字符集:Big5 getBytes()长度6
数组内容:
-85 -94 -85 -94 -85 -94
字符集:Big5-HKSCS getBytes()长度6
数组内容:
-85 -94 -85 -94 -85 -94
字符集:EUC-JP getBytes()长度6
数组内容:
-46 -3 -46 -3 -46 -3
字符集:EUC-KR getBytes()长度6
数组内容:
-7 -21 -7 -21 -7 -21
字符集:GB18030 getBytes()长度6
数组内容:
-71 -2 -71 -2 -71 -2
字符集:GB2312 getBytes()长度6
数组内容:
-71 -2 -71 -2 -71 -2
字符集:GBK getBytes()长度6
数组内容:
-71 -2 -71 -2 -71 -2
字符集:IBM-Thai getBytes()长度3
数组内容:
63 63 63
字符集:IBM00858 getBytes()长度3
数组内容:
63 63 63
字符集:IBM01140 getBytes()长度3
数组内容:
63 63 63
字符集:IBM01141 getBytes()长度3
数组内容:
63 63 63
字符集:IBM01142 getBytes()长度3
数组内容:
63 63 63
字符集:IBM01143 getBytes()长度3
数组内容:
63 63 63
字符集:IBM01144 getBytes()长度3
数组内容:
63 63 63
字符集:IBM01145 getBytes()长度3
数组内容:
63 63 63
字符集:IBM01146 getBytes()长度3
数组内容:
63 63 63
字符集:IBM01147 getBytes()长度3
数组内容:
63 63 63
字符集:IBM01148 getBytes()长度3
数组内容:
63 63 63
字符集:IBM01149 getBytes()长度3
数组内容:
63 63 63
字符集:IBM037 getBytes()长度3
数组内容:
63 63 63
字符集:IBM1026 getBytes()长度3
数组内容:
63 63 63
字符集:IBM1047 getBytes()长度3
数组内容:
63 63 63
字符集:IBM273 getBytes()长度3
数组内容:
63 63 63
字符集:IBM277 getBytes()长度3
数组内容:
63 63 63
字符集:IBM278 getBytes()长度3
数组内容:
63 63 63
字符集:IBM280 getBytes()长度3
数组内容:
63 63 63
字符集:IBM284 getBytes()长度3
数组内容:
63 63 63
字符集:IBM285 getBytes()长度3
数组内容:
63 63 63
字符集:IBM297 getBytes()长度3
数组内容:
63 63 63
字符集:IBM420 getBytes()长度3
数组内容:
63 63 63
字符集:IBM424 getBytes()长度3
数组内容:
63 63 63
字符集:IBM437 getBytes()长度3
数组内容:
63 63 63
字符集:IBM500 getBytes()长度3
数组内容:
63 63 63
字符集:IBM775 getBytes()长度3
数组内容:
63 63 63
字符集:IBM850 getBytes()长度3
数组内容:
63 63 63
字符集:IBM852 getBytes()长度3
数组内容:
63 63 63
字符集:IBM855 getBytes()长度3
数组内容:
63 63 63
字符集:IBM857 getBytes()长度3
数组内容:
63 63 63
字符集:IBM860 getBytes()长度3
数组内容:
63 63 63
字符集:IBM861 getBytes()长度3
数组内容:
63 63 63
字符集:IBM862 getBytes()长度3
数组内容:
63 63 63
字符集:IBM863 getBytes()长度3
数组内容:
63 63 63
字符集:IBM864 getBytes()长度3
数组内容:
63 63 63
字符集:IBM865 getBytes()长度3
数组内容:
63 63 63
字符集:IBM866 getBytes()长度3
数组内容:
63 63 63
字符集:IBM868 getBytes()长度3
数组内容:
63 63 63
字符集:IBM869 getBytes()长度3
数组内容:
63 63 63
字符集:IBM870 getBytes()长度3
数组内容:
63 63 63
字符集:IBM871 getBytes()长度3
数组内容:
63 63 63
字符集:IBM918 getBytes()长度3
数组内容:
63 63 63
可以看出,不同编码集下,不仅getBytes长度不同,连数组的内容都不一样。
下面测试"aaa":
字符集:Big5 getBytes()长度3
数组内容:
97 97 97
字符集:Big5-HKSCS getBytes()长度3
数组内容:
97 97 97
字符集:EUC-JP getBytes()长度3
数组内容:
97 97 97
字符集:EUC-KR getBytes()长度3
数组内容:
97 97 97
字符集:GB18030 getBytes()长度3
数组内容:
97 97 97
字符集:GB2312 getBytes()长度3
数组内容:
97 97 97
字符集:GBK getBytes()长度3
数组内容:
97 97 97
字符集:IBM-Thai getBytes()长度3
数组内容:
-127 -127 -127
字符集:IBM00858 getBytes()长度3
数组内容:
97 97 97
字符集:IBM01140 getBytes()长度3
数组内容:
-127 -127 -127
字符集:IBM01141 getBytes()长度3
数组内容:
-127 -127 -127
字符集:IBM01142 getBytes()长度3
数组内容:
-127 -127 -127
字符集:IBM01143 getBytes()长度3
数组内容:
-127 -127 -127
字符集:IBM01144 getBytes()长度3
数组内容:
-127 -127 -127
字符集:IBM01145 getBytes()长度3
数组内容:
-127 -127 -127
字符集:IBM01146 getBytes()长度3
数组内容:
-127 -127 -127
字符集:IBM01147 getBytes()长度3
数组内容:
-127 -127 -127
字符集:IBM01148 getBytes()长度3
数组内容:
-127 -127 -127
字符集:IBM01149 getBytes()长度3
数组内容:
-127 -127 -127
字符集:IBM037 getBytes()长度3
数组内容:
-127 -127 -127
字符集:IBM1026 getBytes()长度3
数组内容:
-127 -127 -127
字符集:IBM1047 getBytes()长度3
数组内容:
-127 -127 -127
字符集:IBM273 getBytes()长度3
数组内容:
-127 -127 -127
字符集:IBM277 getBytes()长度3
数组内容:
-127 -127 -127
字符集:IBM278 getBytes()长度3
数组内容:
-127 -127 -127
字符集:IBM280 getBytes()长度3
数组内容:
-127 -127 -127
字符集:IBM284 getBytes()长度3
数组内容:
-127 -127 -127
字符集:IBM285 getBytes()长度3
数组内容:
-127 -127 -127
字符集:IBM297 getBytes()长度3
数组内容:
-127 -127 -127
字符集:IBM420 getBytes()长度3
数组内容:
-127 -127 -127
字符集:IBM424 getBytes()长度3
数组内容:
-127 -127 -127
字符集:IBM437 getBytes()长度3
数组内容:
97 97 97
字符集:IBM500 getBytes()长度3
数组内容:
-127 -127 -127
字符集:IBM775 getBytes()长度3
数组内容:
97 97 97
字符集:IBM850 getBytes()长度3
数组内容:
97 97 97
字符集:IBM852 getBytes()长度3
数组内容:
97 97 97
字符集:IBM855 getBytes()长度3
数组内容:
97 97 97
字符集:IBM857 getBytes()长度3
数组内容:
97 97 97
字符集:IBM860 getBytes()长度3
数组内容:
97 97 97
字符集:IBM861 getBytes()长度3
数组内容:
97 97 97
字符集:IBM862 getBytes()长度3
数组内容:
97 97 97
字符集:IBM863 getBytes()长度3
数组内容:
97 97 97
字符集:IBM864 getBytes()长度3
数组内容:
97 97 97
字符集:IBM865 getBytes()长度3
数组内容:
97 97 97
字符集:IBM866 getBytes()长度3
数组内容:
97 97 97
字符集:IBM868 getBytes()长度3
数组内容:
97 97 97
字符集:IBM869 getBytes()长度3
数组内容:
97 97 97
字符集:IBM870 getBytes()长度3
数组内容:
-127 -127 -127
字符集:IBM871 getBytes()长度3
数组内容:
-127 -127 -127
字符集:IBM918 getBytes()长度3
数组内容:
-127 -127 -127
可以看出对于字母,我这里支持的字符集都返回了3,而数组内容有些是97,另外一些是127,97是我们熟悉的ASCii值,127我就不得而知了。
以上测试说明:不同字符集对于字母和汉字(还包括其他非拉丁文字)编码方式是不同的,包括使用单字节还是双字节,也包括如何编码。
测试代码如下:
Map<String, Charset> map = CharsetavailableCharsets();
Set<String> keySet = mapkeySet();
for(String charSetName: keySet)
{
Systemoutprintln("字符集:" + charSetName + " getBytes()长度" + sgetBytes(mapget(charSetName))length);
Systemoutprintln("数组内容:");
for(byte b: sgetBytes(mapget(charSetName)))
{
Systemoutprint(b + " ");
}
Systemoutprintln();
}
下面的问题是char:
int c = 'A';
int d = '哈';
char e = (char) 12345678;
c = e;
Systemoutprintln(e);
12345678显然是超过了char范围了,不过呢它被截断成2字节,并且根据当前的字符集,打印出来一个汉字。
大概就是这样了
总结,如果你写char ,不管赋值为字母还是汉字还是数字,都占两个字节,只不过高位有些为0
对于字符串,getBytes返回默认编码集下的数组,你可以指定参数获取其他字符集的结果,结果是五花八门的。
如果要了解字符集的编码规范,还请百度相关主题,我这里我不做更多的验证了。
java中编码:URLEncoderencode(strUri,"utf-8");
java中解码码:URLDecoderdecode(strUri,"utf-8");
java编码和解码
流读取文件,具有转换编码功能的有:OutputStreamWriter和InputStreamReader,
构造器有如:
InputStreamReader(InputStream in, String charsetName)
创建使用指定字符集的 InputStreamReader。
OutputStreamWriter(OutputStream out, String charsetName)
创建使用指定字符集的 OutputStreamWriter。
处理字符串编码问题:
重新对获取的字符串进行编码:Byte[] bytes = strgetBytes(String encodeCharsetNam);
重新对bytes进行解码,创建新的字符串对象:str = new String(Byte[] bytes,String decodeCharsetName);
一般结合使用:str = new String(strgetBytes(String encodeCharsetName),String decodeCharsetName);
例如:resultName=new String(usernamegetBytes("ISO-8859-1"),"UTF-8");
还可以加入判断:
if(!CharsetforName("gbk")newEncoder()canEncode(str)){str = new Strin(strgetBytes("ISO-8859-1"),"UTF-8");}else{str = new String(strgetBytes("ISO-8859-1"),"gbk");}
处理请求参数传递编码问题:
java中编码:URLEncoderencode(strUri,"utf-8");
java中解码码:URLDecoderdecode(strUri,"utf-8");
js中编码:encodeURIComponent(strUri);encodeURI(strUri);escape(str);
js中解码:decodeURIComponent(strUri);decodeURI(strUri);unescape(str);
补充概念:
URI组件:主机、端口、路径、查询参数、片段等。
URI组件分隔符::/#&[]@,冒号用于分隔协议和主机,/用于分隔主机和 路径,用于分隔路径和查询参数,&用于分隔多个查询参数等。
URI中的不安全字符或保留字符: ! ‘ ( ) ; : @ & = + $ , / # [ ] 他们具有特殊作用,例如上面的分隔作用。
URI允许出现的字符:只允许包含英文字母(a-zA-Z)、数字(0-9)、-_~4个特殊字符以及所有保留字符,其他字符均需要经过编码之后才能出现在Url中,比如使用保留字符的原意,而不是特殊作用。
js向java/jsp的编码与解码:
js中编码:encodeURI(encodeURI(strUri));decodeURIComponent(decodeURIComponent(strUri));
java/jsp中解码: javanetURLDecoderdecode(strUri,"UTF-8");
js中编码两次的问题:如果使用一次编码,在浏览器地址栏里,浏览器认为%是个转义字符,浏览器会把%与%之间的编码值,两位两位取出后进行解码。
然后再传递给处理页面,然后由处理页面进行再次解码,这样前面就缺少了一次编码过程,所以前面需要连续两次编码。
首先说一下 这篇文章主要是针对 Java 开发者的 如果是做 Windows 开发 那么基本上没有办法把工作环境移植到 Ubuntu 上的(当然也不能说死 也许以后可以使用 WINE 试试 呵呵)
系统默认编码 我们知道在中文 Windows 下一般来说系统的默认编码是 GBK 从 Java 开发的角度来说 就是在进行诸如 Java 源代码编译 文件读写等 *** 作时 默认使用的编码是 GBK; 而我们参照一般的 Ubuntu 中文安装文档 可能会建议将默认的语言设置为 zh_CN UTF 这样会带来一些问题 比如我在 Windows 使用 Eclipse 时的编辑器的默认编码是 GBK 但是在 Ubuntu 下面就是 UTF 同样是使用 Eclipse 在 Windows 下的中文文档到了 Ubuntu 中会产生乱码 必须手工逐个文档设置属性中的编码为 GBK 才可以正常; 一些测试代码也是以默认编码读取文件的 这些代码读取出来的文件内容也会包含乱码 所以 最好是将系统的默认编码设置为 GBK 这样和 Windows 下面的开发环境最接近 设置的方法应该不止一种 我采用的是编辑 /etc/environment 改成这个样子: 中文字体 Ubuntu 默认安装后的中文字体不是点阵字体 因此在小字显示的时候模模糊糊比较难看 而且 在浏览网页时 无法显示中文粗体 关于字体美化的文章网上太多了 有些是采用 Windows 字体来进行的; 最近 文泉驿 ( ) 的开源点阵字体受到很多好评 而且点阵字体正好合适用于小字的显示 我用的是最新的 beta 版( pcf update ) 按照 文泉驿点阵宋体安装指南 上的步骤安装 修改了 nf 也执行了 fc cache f v 安装过程还算顺利 就是有一点需要注意 那就是字体一定要放在 /usr/share/fonts/ 的子目录下面 不然执行 fc cache 不会起作用的 安装完毕后需要配置一下系统的默认字体 Firefox 也需要配置一下字体 效果还是不错的(见下面截图) Java(Swing)程序的字体 这个我主要参考了 最简单的对JDK 的中文乱码处理方法 按照其中更简单的那个方法 在 $JAVA_HOME/jre/lib/fonts/ 目录下创建 fallback 目录 并把一个中文的 TTF 字体链接或者安装到 fallback 目录下就可以了 和参考文章说的稍有差别 我是下载了文泉驿 ttf update 的 TTF 字体 直接解压后复制到 fallback 目录下 接着执行 mkfontdir 和 mkfontscale 果然问题得以解决; 现在 NetBeans 或者 JMeter 的 打开 文件对话框中的按钮和标签就正确显示出中文了 安装在 Ubuntu 上面的 NetBeans : 存在中文问题的 打开项目 对话框: 经过处理后可以正确显示中文的对话框: lishixinzhi/Article/program/Java/hx/201311/27094
乱码是因为cmd里面编码是不对的。你的安装路径有中文。而cmd里面编码是当然你可以通过修改:右键-属性-选项=> 当前代码页 你可以看到你的编码。这个的编码是根据你系统的默认编码来的。chcp 65001 就是换成UTF-8代码页chcp 936 可以换回默认的GBK
MySQL会出现中文乱码的原因不外乎下列几点:
1server本身设定问题。
2table的语系设定问题(包含character与collation)
3客户端程式(例如php)的连线语系设定问题强烈建议使用utf8。utf8可以兼容世界上所有字符!
一、避免创建数据库及表出现中文乱码和查看编码方法
1、创建数据库的时候:CREATE DATABASE `test`
CHARACTER SET 'utf8'
COLLATE 'utf8_general_ci';
2、建表的时候 CREATE TABLE `database_user` (
`ID` varchar(40) NOT NULL default '',
`UserID` varchar(40) NOT NULL default '',
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
这2个设置好了,基本就不会出问题了,即建库和建表时都使用相同的编码格式。
但是如果已经建了库和表可以通过以下方式进行查询。
1查看默认的编码格式:
mysql> show variables like "%char%";
+--------------------------+---------------+
| Variable_name | Value |
+--------------------------+---------------+
| character_set_client | gbk |
| character_set_connection | gbk |
| character_set_database | utf8 |
| character_set_filesystem | binary |
| character_set_results | gbk |
| character_set_server | utf8 |
| character_set_system | utf8 |
+--------------------------+-------------+
注:以前2个来确定,可以使用set names utf8,set names gbk设置默认的编码格式;
执行SET NAMES utf8的效果等同于同时设定如下:
SET character_set_client='utf8';
SET character_set_connection='utf8';
SET character_set_results='utf8';
2查看test数据库的编码格式:
mysql> show create database test;
+------------+------------------------------------------------------------------------------------------------+
| Database | Create Database |
+------------+------------------------------------------------------------------------------------------------+
| test | CREATE DATABASE `test` /!40100 DEFAULT CHARACTER SET gbk / |
+------------+------------------------------------------------------------------------------------------------+
3查看yjdb数据库的编码格式:
mysql> show create table yjdb;
| yjdb | CREATE TABLE `yjdb` (
`sn` int(5) NOT NULL AUTO_INCREMENT,
`type` varchar(10) NOT NULL,
`brc` varchar(6) NOT NULL,
`teller` int(6) NOT NULL,
`telname` varchar(10) NOT NULL,
`date` int(10) NOT NULL,
`count` int(6) NOT NULL,
`back` int(10) NOT NULL,
PRIMARY KEY (`sn`),
UNIQUE KEY `sn` (`sn`),
UNIQUE KEY `sn_2` (`sn`)
) ENGINE=MyISAM AUTO_INCREMENT=1826 DEFAULT CHARSET=gbk ROW_FORMAT=DYNAMIC |
二、避免导入数据有中文乱码的问题
1:将数据编码格式保存为utf-8
设置默认编码为utf8:
set names utf8;
设置数据库db_name默认为utf8:
ALTER DATABASE `db_name` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
设置表tb_name默认编码为utf8:
ALTER TABLE `tb_name` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
导入:
LOAD DATA LOCAL INFILE 'C:\\utf8txt' INTO TABLE yjdb;
2:将数据编码格式保存为ansi(即GBK或GB2312)
设置默认编码为gbk:
set names gbk;
设置数据库db_name默认编码为gbk:
ALTER DATABASE `db_name` DEFAULT CHARACTER SET gbk COLLATE gbk_chinese_ci;
设置表tb_name默认编码为gbk:
ALTER TABLE `tb_name` DEFAULT CHARACTER SET gbk COLLATE gbk_chinese_ci;
导入:
LOAD DATA LOCAL INFILE 'C:\\gbktxt' INTO TABLE yjdb;
注:1UTF8不要导入gbk,gbk不要导入UTF8;
2dos下不支持UTF8的显示;
三、解决网页中乱码的问题
将网站编码设为 utf-8,这样可以兼容世界上所有字符。
如果网站已经运作了好久,已有很多旧数据,不能再更改简体中文的设定,那么建议将页面的编码设为 GBK, GBK与GB2312的区别就在于:GBK能比GB2312显示更多的字符,要显示简体码的繁体字,就只能用GBK。
1编辑/etc/mycnf ,在[mysql]段加入default_character_set=utf8;
2在编写Connection URL时,加上useUnicode=true&characterEncoding=utf-8参;
3在网页代码中加上一个"set names utf8"或者"set names gbk"的指令,告诉MySQL连线内容都要使用utf8或者gbk。
以上就是关于NetBeans如何设定默认编码 - 技术问答全部的内容,包括:NetBeans如何设定默认编码 - 技术问答、关于java字符编码问题、java中编码与解码分别指什么等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)