有时候json文件,纯文本的文件在nginx或者tomcat上为乱码
可能不像html或者jsp那样可以设置字符编码
注意nginx和tomcat都有utf8的配置
另外要注意
文件也有编码
linux下用vim打开
:set encoding=utf-8
:set fileencoding=utf-8
转http://ssmax.net/archives/1136.html
参考http://www.wcode.net/plus/view.php?aid=246850
由于以前偷懒的原因,很多数据库都是使用latin1作为字符编码,这样可以原样保留数据的字节流,但是最近发现新版的mysql驱动,包括345各版本的最新驱动,用characterEncoding=latin1 参数去访问数据,都会出现问号乱码的问题。
在网上查了一下,有人说是驱动里面自带强制转换,所以出了问题,根据提示看了一下代码,果然在
ResultSetRow在getString的时候,会使用 SingleByteCharsetConverter 来强制转码,发生了问题。
网上说要修改驱动,我自己尝试了一下,既然强制转码里面选择了使用cp1252,那这个字符集应该也是单字符全集,所以我直接尝试用该字符集来连接,问题就解决了。。。。
有两种解决方案:
1. 使用ResultSet中的getBytes方法,直接获取原始bytes数组,自己按照录入时候的编码new String即可。
2. 如果用了框架结构,写了必须获取String的,那么连接参数可以写
characterEncoding=cp1252
程序使用的时候
rs.getString(1).getBytes(“cp1252″)
即可获取原始字节数组,然后也是按照录入编码进行 new String 即可。
注意这种方法可能会引起问题,由于cp1252对一些字节的处理并不是我们理解的那样,比如
MySQL translates 0×81 to Unicode 0×0081, 0x8d to 0x008d, 0x8f to 0x008f, 0×90 to 0×0090, and 0x9d to 0x009d.
如果汉字里面刚好有着3中字节的,就会出问题,显示问号。。。
研究了一下,发了一个bug帖,http://bugs.mysql.com/bug.php?id=64071
估计也是没人理会的了,呵呵,就当练练英文。
我的程序:
con = (Connection) DriverManager
.getConnection(
"jdbc:mysql://1231231231213:3365/origin_chapters?characterEncoding=cp1252",
"bookapp_r", "6c0a3ebf4");
chapter.setChapter_content(new String(rs.getString("Content").getBytes("cp1252"), "gbk"));
分享到:
相关推荐
MySQL数据库在处理字符编码时,经常涉及到不同的字符集转换,如latin1到gbk,gbk到utf8,甚至gbk到big5等。这些转换在处理多语言数据或者迁移数据库时尤其重要,因为不同的字符集支持不同的字符范围,比如latin1主要...
常见的字符编码有ASCII、ISO-8859-1(Latin-1)、GB2312、GBK、UTF-8等。其中,ISO-8859-1主要支持西欧语言,而GB2312是早期的简体中文编码标准,UTF-8则是一种通用的多字节编码,广泛应用于互联网。 #### 2. 编码...
本文将针对标题中的几种常见编码格式(GBK、ISO 8859-1、UTF-8)以及如何解决由这些编码方式引发的乱码问题进行深入探讨。 #### 一、编码概述 1. **GBK编码**:GBK是GB2312标准的扩展,支持简体中文,是Microsoft ...
这些函数通常包括“字符串转GBK”和“GBK转字符串”等,它们内部实现了对字节序列的解析和重构。 3. 字节顺序标记(BOM):Unicode编码中,有时会包含一个字节顺序标记(Byte Order Mark, BOM),用于标识字节流的...
- 从ISO-8859-1编码转换到GBK或UTF-8时,可能会出现乱码问题,因为某些ISO-8859-1字符可能无法正确地映射到GBK或UTF-8中: ```java String isoStr = "a?"; byte[] isoBytes = isoStr.getBytes("ISO-8859-1"); ...
由此可以看出,服务器端和数据库使用的是GBK编码,而客户端和连接则使用的是Latin1(ISO-8859-1)编码。这种情况下,如果在客户端插入包含GBK字符的数据,就会因为编码不一致而产生乱码。 #### 三、解决方案 针对...
ISO-8859-1,又称为Latin-1,是一种单字节编码,只包含西欧语言的基本拉丁字母。在处理英文为主的程序时,ISO-8859-1是足够用的,但无法正确显示中文或其他非拉丁字符。 GBK 是针对中文的一种编码,它是GB2312的...
在Java中,常用的编码有`ISO-8859-1`(也称为`latin1`)、`GBK`、`UTF-8`等。 ### 具体操作步骤 #### 1. 明确源编码 在处理来自HTTP请求的参数时,`request.getParameter()`方法默认使用`ISO-8859-1`编码读取参数...
默认情况下,character_set_server 变量的值是 latin1,這导致了中文乱码问题的出现。另外,数据库的编码方式也可能是导致乱码问题的原因。如果数据库的编码方式不是 utf8, 那么在插入中文数据时就会出现乱码问题。...
MySQL数据库系统中文乱码问题及解决方案 MySQL数据库系统中文乱码问题是指在使用MySQL数据库系统时,中文字符在存储、传输和显示过程中出现乱码的问题。这种问题的出现是由于字符集和编码方式的不兼容所致。 在...
例如,如果我们向默认字符集为utf8的数据表插入utf8编码的数据前没有设置连接字符集,那么插入的数据将经过latin1=>latin1=>utf8的字符集转换过程,导致乱码。如果我们向默认字符集为latin1的数据表插入utf8编码的...
MYSQL数据库支持多种字符集,包括gbk、utf8、latin1等。在创建数据库时,可以使用CREATE DATABASE语句指定字符集类型,例如: CREATE DATABASE haichen CHARACTER SET gbk COLLATE gbk_chinese_ci 这里,gbk是指...
### Linux乱码问题解决方案 #### 一、理解乱码产生的原因 在Linux环境中,乱码问题通常是由于不同操作系统之间的字符编码差异所导致的。Windows系统默认采用GBK编码(早期使用GB2312),而Linux则普遍使用UTF-8编码...
4,乱码问题:sybase使用latin1字符集的时候,c#中读取字符串会是乱码,进行如下转换就行: System.Text.Encoding.GetEncoding("gbk").GetString( System.Text.Encoding.GetEncoding("latin1").GetBytes( s );
通常,MySQL 的默认字符集是 Latin1(ISO 8859-1),这是一种西文字符集,并不支持中文字符。当尝试存储中文数据时,由于字符集不匹配,就会导致乱码现象。 此外,需要注意的是 UTF-8 是一种国际通用的编码格式,它...
Mysql支持多种语言字符集,包括utf8、gb2312、big5、gbk、latin1、latin2、ascii等。这些字符集可以满足不同的语言需求。 数据库表中对字段字符集的设置 在数据库表中,我们需要对字段字符集进行设置。我们可以...
常用的字符集有`latin1`、`utf8`、`gbk`等,其中`utf8`对中文的支持较好。 #### 3. **连接参数的正确设置** 当使用Java或JSP等语言连接MySQL时,必须确保连接参数中包含正确的字符集设置。这通常通过URL参数`...
### Linux乱码问题解决方案 #### 一、理解乱码产生的原因 ... set fileencodings=utf-8,ucs-bom,gbk,latin1 ``` 通过以上步骤,可以有效地解决Linux环境下的乱码问题,无论是文件内容还是文件名,都能得到妥善处理。