把三个client信息写入调试信息文件,读出打印

MySQL字符集 GBK、GB2312、UTF8区别 解决 MYSQL中文乱码问题
_源码_站长之家
MySQL字符集 GBK、GB2312、UTF8区别 解决 MYSQL中文乱码问题
MySQL中涉及的几个字符集
character-set-server/default-character-set:服务器字符集,默认情况下所采用的。
character-set-database:数据库字符集。
character-set-table:数据库表字符集。
优先级依次增加。所以一般情况下只需要设置character-set-server,而在创建数据库和表时不特别指定字符集,这样统一采用character-set-server字符集。
character-set-client:客户端的字符集。客户端默认字符集。当客户端向服务器发送请求时,请求以该字符集进行编码。
character-set-results:结果字符集。服务器向客户端返回结果或者信息时,结果以该字符集进行编码。
在客户端,如果没有定义character-set-results,则采用character-set-client字符集作为默认的字符集。所以只需要设置character-set-client字符集。
要处理中文,则可以将character-set-server和character-set-client均设置为GB2312,如果要同时处理多国语言,则设置为UTF8。
关于MySQL的中文问题
解决乱码的方法是,在执行SQL语句之前,将MySQL以下三个系统参数设置为与服务器字符集character-set-server相同的字符集。
character_set_client:客户端的字符集。
character_set_results:结果字符集。
character_set_connection:连接字符集。
设置这三个系统参数通过向MySQL发送语句:set names gb2312
关于GBK、GB2312、UTF8
UTF- 8:Unicode Transformation Format-8bit,允许含BOM,但通常不含BOM。是用以解决国际上字符的一种多字节编码,它对英文使用8位(即一个字节),中文使用24为(三个字节)来编码。UTF-8包含全世界所有国家需要用到的字符,是国际编码,通用性强。UTF-8编码的文字可以在各国支持UTF8字符集的浏览器上显示。如,如果是UTF8编码,则在外国人的英文IE上也能显示中文,他们无需下载IE的中文语言支持包。
GBK是国家标准GB2312基础上扩容后兼容GB2312的标准。GBK的文字编码是用双字节来表示的,即不论中、英文字符均使用双字节来表示,为了区分中文,将其最高位都设定成1。GBK包含全部中文字符,是国家编码,通用性比UTF8差,不过UTF8占用的数据库比GBD大。
GBK、GB2312等与UTF8之间都必须通过Unicode编码才能相互转换:
GBK、GB2312--Unicode--UTF8
UTF8--Unicode--GBK、GB2312
对于一个网站、论坛来说,如果英文字符较多,则建议使用UTF-8节省空间。不过现在很多论坛的插件一般只支持GBK。
GB2312是GBK的子集,GBK是GB18030的子集
GBK是包括中日韩字符的大字符集合
如果是中文的网站 推荐GB2312 GBK有时还是有点问题
为了避免所有乱码问题,应该采用UTF-8,将来要支持国际化也非常方便
UTF-8可以看作是大字符集,它包含了大部分文字的编码。
使用UTF-8的一个好处是其他地区的用户(如香港台湾)无需安装简体中文支持就能正常观看你的文字而不会出现乱码。
gb2312是简体中文的码
gbk支持简体中文及繁体中文
big5支持繁体中文
utf-8支持几乎所有字符
首先分析乱码的情况
2.查询结果以乱码返回
究竟在发生乱码时是哪一种情况呢?
我们先在mysql 命令行下输入
show variables like '%char%';
查看mysql 字符集设置情况:
mysql& show variables like '%char%';
+--------------------------+----------------------------------------+
| Variable_name&&&&&&&&&&& | Value&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& |
+--------------------------+----------------------------------------+
| character_set_client&&&& | gbk&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& |&
| character_set_connection | gbk&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& |&
| character_set_database&& | gbk&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& |&
| character_set_filesystem | binary&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& |&
| character_set_results&&& | gbk&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& |&
| character_set_server&&&& | gbk&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& |&
| character_set_system&&&& | utf8&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& |&
&&&&&&| /usr/local/mysql/share/mysql/charsets/ |&
+--------------------------+----------------------------------------+
  在查询结果中可以看到mysql 数据库系统中客户端、数据库连接、数据库、文件系统、查询结果、服务器、系统的字符集设置在这里,文件系统字符集是固定的,系统、服务器的字符集在安装时确定,与乱码问题无关。乱码的问题与客户端、数据库连接、数据库、查询结果的字符集设置有关。
*注:客户端是看访问mysql 数据库的方式,通过命令行访问,命令行窗口就是客户端,通过JDBC 等连接访问,程序就是客户端我们在向mysql 写入中文数据时,在客户端、数据库连接、写入数据库时分别要进行编码转换。在执行查询时,在返回结果、数据库连接、客户端分别进行编码转换。现在我们应该清楚,乱码发生在数据库、客户端、查询结果以及数据库连接这其中一个或多
接下来我们来解决这个问题
在登录数据库时,我们用mysql --default-character-set=字符集-u root -p 进行连接,这时我们
再用show variables like '%char%';命令查看字符集设置情况,可以发现客户端、数据库连接、
查询结果的字符集已经设置成登录时选择的字符集了
如果是已经登录了,可以使用set names 字符集;命令来实现上述效果,等同于下面的命令:
set character_set_client = 字符集
set character_set_connection = 字符集
set character_set_results = 字符集
如果是通过JDBC 连接数据库,可以这样写URL:
URL=jdbc:mysql://localhost:3306/abs?useUnicode=true&characterEncoding=字符集
JSP 页面等终端也要设置相应的字符集
数据库的字符集可以修改mysql 的启动配置来指定字符集,也可以在create database 时加上
default character set 字符集来强制设置database 的字符集
通过这样的设置,整个数据写入读出流程中都统一了字符集,就不会出现乱码了
为什么从命令行直接写入中文不设置也不会出现乱码?
可以明确的是从命令行下,客户端、数据库连接、查询结果的字符集设置没有变化
输入的中文经过一系列转码又转回初始的字符集,我们查看到的当然不是乱码
但这并不代表中文在数据库里被正确作为中文字符存储
举例来说,现在有一个utf8 编码数据库,客户端连接使用GBK 编码,connection 使用默认
的ISO8859-1(也就是mysql 中的latin1),我们在客户端发送"中文"这个字符串,客户端
将发送一串GBK 格式的二进制码给connection 层,connection 层以ISO8859-1 格式将这段
二进制码发送给数据库,数据库将这段编码以utf8 格式存储下来,我们将这个字段以utf8
格式读取出来,肯定是得到乱码,也就是说中文数据在写入数据库时是以乱码形式存储的,
在同一个客户端进行查询操作时,做了一套和写入时相反的操作,错误的utf8 格式二进制
码又被转换成正确的GBK 码并正确显示出来。
这几天查找了很多关于mysql对中文字符编码的处理,读了各种零散的文章,最后做了全面的总结,现和大家分享:
MySQL字符编码 GBK、GB2312、UTF8区别:
1.系统编码
&show variables like '%character%';&&
&&&&&&&&&&& mysql& show variables like '%collation%';
改变系统编码:修改my.cnf(/f)中默认的编码选项[mysqld]下添加default-charcter-set=utf8& mysql 5.5以上版本换成了character-set-server=utf8 重新启动mysql
&& 命令形式&& mysql& SET NAMES 'utf8'; 重新启动mysql的时候所有的设置将失效
2.数据库编码
查看数据库编码: mysql& show create database db_name;
修改数据库编码: mysql& ALTER DATABASE db_name ####这里修改整个数据库的编码
&&&&&& &&& &&& CHARACTER SET utf8
&&&&&& &&& &&&& &&& DEFAULT CHARACTER SET utf8
&&&&&& &&& &&&& &&& COLLATE utf8_general_ci
&&&&&& &&& &&&& &&& DEFAULT COLLATE utf8_general_
在在建数据库的时候指定编码:
&&& &&& mysql& CREATE DATABASE db_name
&&& &&& &&&&&& CHARACTER SET utf8
&&& &&& &&&&&& DEFAULT CHARACTER SET utf8
&&& &&& &&&&&& COLLATE utf8_general_ci
&&& &&& &&&&&& DEFAULT COLLATE utf8_general_
3.数据库表和字段编码
查看数据库表和字段编码: mysql& show create table table_name;
&ALTER TABLE table_name DEFAULT CHARACTER SET utf8;&
修改字段编码: mysql& ALTER TABLE `table_name` CHANGE `dd` `dd` VARCHAR( 45 ) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL&&&&&&&&&&&& 该命令就是将MYSQL数据库table_name表中 dd的字段编码改为utf8
4.命令行下插入汉字时指定编码:mysql& set names utf8;&& 有时候这一句很关键!
&&& &&& &&& &&& mysql& insert into test(name) values('王东伟');
总之,不管采用那一种编码方式,只要做到完全统一将能达到相应的效果。
最流行的Web Server Apache发布了一个重大升级版,Apache HTTP Server 2.4的一个重要目标是大幅改进性能。...
热门源码下载推荐
最受关注报导
编辑推荐排行分布式文件系统 moosefs-msf文件写入测试+读写抓包分析_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
评价文档:
&&¥2.00
&&¥0.50
&&¥0.50
喜欢此文档的还喜欢
分布式文件系统 moosefs-msf文件写入测试+读写抓包分析
阅读已结束,如果下载本文需要使用
想免费下载本文?
把文档贴到Blog、BBS或个人站等:
普通尺寸(450*500pix)
较大尺寸(630*500pix)
你可能喜欢Java实现对ftp的读写文件(mons.net.ftp) - TechBirds在路上
- 博客频道 - CSDN.NET
3510人阅读
这里仅仅是对ftp工具类的简单使用,很多东西还不是很了解。当然学以致用,先用到这里吧。
public class FtpTest {
* 向ftp写文件(数据)
public void uploadFile() {
// 要写入的文件内容
String fileContent = &hello world,你好世界&;
// ftp登录用户名
String userName = &admin&;
// ftp登录密码
String userPassword = &xxxx&;
// ftp地址
String server = &127.0.0.1&;//直接ip地址
// 创建的文件
String fileName = &ftp.txt&;
// 指定写入的目录
String path = &wd&;
FTPClient ftpClient = new FTPClient();
InputStream is =
// 1.输入流
is = new ByteArrayInputStream(fileContent.getBytes());
// 2.连接服务器
ftpClient.connect(server);
// 3.登录ftp
ftpClient.login(userName, userPassword);
// 4.指定写入的目录
ftpClient.changeWorkingDirectory(path);
// 5.写操作
ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);
ftpClient.storeFile(new String(fileName.getBytes(&utf-8&),
&iso-8859-1&), is);
is.close();
} catch (Exception e) {
e.printStackTrace();
} finally {
if (ftpClient.isConnected()) {
ftpClient.disconnect();
} catch (Exception e) {
e.printStackTrace();
* ftp下载数据
public void downFile() {
// ftp登录用户名
String userName = &admin&;
// ftp登录密码
String userPassword = &xxxx&;
// ftp地址:直接IP地址
String server = &xxxx&;
// 创建的文件
String fileName = &ftp.txt&;
// 指定写入的目录
String path = &wd&;
// 指定本地写入文件
String localPath=&D:\\&;
FTPClient ftp = new FTPClient();
//1.连接服务器
ftp.connect(server);
//2.登录服务器 如果采用默认端口,可以使用ftp.connect(url)的方式直接连接FTP服务器
ftp.login(userName, userPassword);
//3.判断登陆是否成功
reply = ftp.getReplyCode();
if (!FTPReply.isPositiveCompletion(reply)) {
ftp.disconnect();
//4.指定要下载的目录
ftp.changeWorkingDirectory(path);// 转移到FTP服务器目录
//5.遍历下载的目录
FTPFile[] fs = ftp.listFiles();
for (FTPFile ff : fs) {
//解决中文乱码问题,两次解码
byte[] bytes=ff.getName().getBytes(&iso-8859-1&);
String fn=new String(bytes,&utf8&);
if (fn.equals(fileName)) {
//6.写操作,将其写入到本地文件中
File localFile = new File(localPath + ff.getName());
OutputStream is = new FileOutputStream(localFile);
ftp.retrieveFile(ff.getName(), is);
is.close();
ftp.logout();
} catch (IOException e) {
e.printStackTrace();
} finally {
if (ftp.isConnected()) {
ftp.disconnect();
} catch (IOException ioe) {
很多知识点是相互联系的,希望以后的例子中能够结合更多的知识点进行实例编写,这样也有助于知识的巩固。
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:500912次
积分:4603
积分:4603
排名:第2660名
原创:79篇
转载:142篇
评论:95条
(1)(28)(40)(17)(18)(12)(25)(39)(35)(6)
博客中的有部分是经转载或者参考网络所得,尽可能的去注明出处或者标记转载,或许有些地方并未注明且内容有不妥之处,还望大家谅解、指出。本人只是以学习记录作为理解掌握知识的途径而已。
1.熟练掌握Struts,Spring,Hibernate 2.熟悉mvsql、oracle或其他关系型数据库的使用和设计 3.熟悉TCP/IP基本原理,熟悉Http协议,了解Restful; 4.熟悉Jetty、Jboss等Web服务器的部署与配置; 5.velocity 6.webService 7.熟练使用shell/perl/python/ruby中至少一种脚本语言当前位置: >
> [C文件操作]--文件写入数据后,再读出写入的数据打印显示在屏幕,可为什么显示结果不一样啊?我把数
[C文件操作]--文件写入数据后,再读出写入的数据打印显示在屏幕,可为什么显示结果不一样啊?我把数
yanzheng65 & at
[C文件操作]--文件写入数据后,再读出写入的数据打印显示在屏幕,可为什么显示结果不一样啊?我把数据写的文件里,然后再读取出来打印在屏幕上,可为什么显示的数据不是我写入的呢?
我觉着文件缓冲那部分有问题&我的理解是文件流那里写入数据之后,用fflush刷新缓冲区&然后再打开文件流读取数据,我就这样写了下面的程序,可是显示结果不对,我的理解是不是错了?希望大家给看一下,先谢谢啦!
/*程序:文件操作:写入-读取-打印显示*/
#include&stdio.h&
#include&stdlib.h&
int&main()
&&int&a,&b,&c,&d;
&&input&=&fopen("data_scanf",&"w");&/*写入方式创建文件*/
&&if&(input&==&0)&{
&&&&&perror("data_scanf");
&&&&&exit(EXIT_FAILURE);
&&fputs("",&input);&/*写入文件数据*/
&&input&=&fopen("data_scanf",&"r");&/*只读方式打开文件*/
&&if&(input&==&NULL)&{
&&&&&perror("data_scanf");
&&&&&exit(EXIT_FAILURE);
&&d&=&fscanf(input,&"%4d&%4d&%4d",&&a,&&b,&&c);&
&&printf("%d\n%d\n%d\nd&=&%d\n",&a,&b&,c,&d);/*打印文件数据到显示屏幕*/
&&if&(fclose(input)&!=&0)&{
&&&&&perror("fclose");
&&&&&exit(EXIT_FAILURE);
&&return&EXIT_SUCCESS;
  fputs("",&input);&/*写入文件数据*/
用它写进去,然后你又格式化读取,肯定不对yanzhibao456 & &
& & (0)(0)用fgets读取。yanzhenghua1 & &
& & (0)(0)写入的时候要么也按你读出时一样格式化写入
要么用fgets/fgetc&读取字符lljjqq & &
& & (0)(0)推荐使用WinHex软件查看硬盘或文件或内存中的原始字节内容。
fopen("...","...");fscanf,fprintf,fclose&//读时把\r\n替换成\n,写时把\n替换成\r\n;读到\x1a就设置EOF;读写的内容当字符看待
fopen("...","...b");fread,fwrite,fclose&&//不作以上替换,遇到\x1a仍继续读;读写的内容当字节看待
电脑内存或文件内容只是一个一维二进制字节数组及其对应的二进制地址;lljj79 & &
& & (0)(0)
本问题标题:
本问题地址:
温馨提示:本问题已经关闭,不能解答。
暂无合适的专家
&&&&&&&&&&&&&&&
希赛网 版权所有 & &&&&湘教QS2-164&&增值电信业务经营许可证湘B2-

我要回帖

更多关于 vsphere client 的文章

 

随机推荐