精华内容
下载资源
问答
  • java读取mysql latin1编码的中文乱码
    2021-12-30 11:47:06

    问题:

    mysql表示utf8编码,写入的中文是Latin1编码,即读取中文之前需要先执行set names latin1,中文显示才不乱码。

    java读取这种情形的中文怎么保证不乱码?

    1、jdbc-url=jdbc:mysql://{ip}:3306/spring?characterEncoding=utf8

    说明:jdbc的url字符集指定为utf8

    2、在执行sql查询前先执行

    set names latin1

    如果用jdbctemplate,代码如下:

    jdbcTemplate.execute("set names latin1");

    3、获取的数据转换

    ResultSet rs;

    byte[] bval = rs.getBytes(i);//获取字段对应比特数组

    String val = "";

    val = new String(bval, "UTF-8");//将比特数组转换为utf8字符串

    val中含有中文将会正常显示。

    完毕~

    更多相关内容
  • Latin1什么编码是ISO-8859-1的别名

    千次阅读 2012-07-21 11:26:08
     Latin1是ISO-8859-1的别名,有些环境下写作Latin-1。  ISO-8859-1  ISO-8859-1编码是单字节编码,向下兼容ASCII,其编码范围是0x00-0xFF,0x00-0x7F之间完全和ASCII一致,0x80-0x9F之间是控制字符,0xA0-0xFF...
    atin1
      Latin1是ISO-8859-1的别名,有些环境下写作Latin-1。
      ISO-8859-1
      ISO-8859-1编码是单字节编码,向下兼容ASCII,其编码范围是0x00-0xFF,0x00-0x7F之间完全和ASCII一致,0x80-0x9F之间是控制字符,0xA0-0xFF之间是文字符号。
      ISO-8859-1收录的字符除ASCII收录的字符外,还包括西欧语言、希腊语、泰语、阿拉伯语、希伯来语对应的文字符号。欧元符号出现的比较晚,没有被收录在ISO-8859-1当中。
      因为ISO-8859-1编码范围使用了单字节内的所有空间,在支持ISO-8859-1的系统中传输和存储其他任何编码的字节流都不会被抛弃。换言之,把其他任何编码的字节流当作ISO-8859-1编码看待都没有问题。这是个很重要的特性,MySQL数据库默认编码是Latin1就是利用了这个特性。ASCII编码是一个7位的容器,ISO-8859-1编码是一个8位的容器。
    ISO8859-1,通常叫做Latin-1。Latin-1包括了书写所有西方欧洲语言不可缺少的附加字符。
    而gb2312是标准中文字符集。
    UTF-8 是 UNICODE 的一种变长字符编码,即 RFC 3629。简单的说——大字符集。可以解决多种语言文本显示问题,从而实现应用国际化和本地化。

    对系统来讲,UTF-8 编码可以通过屏蔽位和移位操作快速读写,排序更加容易。UTF-8 是字节顺序无关的,它的字节顺序在所有系统中都是一样的。因此 UTF-8 具有更高的性能。

    不过如果是纯英文的话,用什么都可以,用GB2312也没问题。
    展开全文
  • 初学者往往会犯糊涂,mysql 的默认字符集 latin1 是否支持中文?初步分析表明,是的,确实支持中文!...ISO-8859-1编码是单字节编码,向下兼容ASCII,其编码范围是0x00-0xFF,0x00-0x7F之间完全和ASCII一致,0x80...

    初学者往往会犯糊涂,mysql 的默认字符集 latin1 是否支持中文?

    初步分析表明,是的,确实支持中文!(是初步的结论,只做了初步的分析)

    1. 先来看看latin1 (参考百度百科)

    Latin1是ISO-8859-1的别名,有些环境下写作Latin-1。

    ISO-8859-1编码是单字节编码,向下兼容ASCII,其编码范围是0x00-0xFF,0x00-0x7F之间完全和ASCII一致,0x80-0x9F之间是控制字符,0xA0-0xFF之间是文字符号。

    ISO-8859-1收录的字符除ASCII收录的字符外,还包括西欧语言、希腊语、泰语、阿拉伯语、希伯来语对应的文字符号。欧元符号出现的比较晚,没有被收录在ISO-8859-1当中。

    因为ISO-8859-1编码范围使用了单字节内的所有空间,在支持ISO-8859-1的系统中传输和存储其他任何编码的字节流都不会被抛弃。换言之,把其他任何编码的字节流当作ISO-8859-1编码看待都没有问题。这是个很重要的特性,MySQL数据库默认编码是Latin1就是利用了这个特性。ASCII编码是一个7位的容器,ISO-8859-1编码是一个8位的容器。

    2. 稍微再想想字符集

    是的,不用纠结太多了,如果数据库内表的字符集是latin1,那么默认情况下中文也可被支持!

    · latin1覆盖了所有单字节的值,任何其他的码流都可以被看做latin1

    · 把一个gbk编码的串写入latin1的表,不会有任何问题,保存的是原封不动的字节流

    · 从表中读取已写入的串也不会有任何问题,且读出的字节流就和当初写入的完全一致

    读取出来以后,如果在终端下,就会理解成locale类型(如果locale系gbk,当时写入的gbk中文串可正常回显)

    读取出来以后,如果要写入文件,则文件编码方式即当时写入的字节流编码,如gbk写入的,读出存入文件后,文件编码也是gbk!但是如果混着写(utf-8 + gbk),那编辑器就犯蒙了,就可能会显示会有乱码。

    注: 纯文本文件大多无文件头,编辑器是通过字节流自己识别编码方式和字符集的

    3. 综上,建DB和访问DB时如果都采用默认的latin1,那就不仅仅支持中文,而是支持任意的编码方式!

    附送几个数据库中文编码的经验教训:

    1. 基于可维护的角度,虽然latin1没什么问题,但是还是尽量换成utf8或者gb系列

    2. 出现乱码时:

    SHOW VARIABLES LIKE 'character%'

    SHOW VARIABLES LIKE 'collation_%';

    a、要保证数据库中存的数据与数据库编码一致,即数据编码与character_set_database一致;

    b、要保证通讯的字符集与数据库的字符集一致,即character_set_client, character_set_connection与character_set_database一致;

    c、要保证SELECT的返回与程序的编码一致,即character_set_results与程序编码一致;

    d、要保证程序编码与浏览器、终端编码一致

    3. 要想简单一点的话,就将各个字符集都设为一致的,写入mysql的配置文件,每次用客户端都设置一下字符集(set names 'xxx'),写入和读取时要记得确保字节流的编码是ok的

    笔者近期遇到一个问题,latin1保存汉字导致不同汉字被认为相等的问题,例如“冷梦"与"冷渺"相等

    SHOW VARIABLES LIKE '%coll%';

    collation_connection latin1_swedish_ci

    collation_database latin1_swedish_ci

    collation_server latin1_swedish_ci

    latin1_swedish_ci是忽略大小写的,改为

    select * from tblCharacter where fldCharName = ('冷梦' COLLATE latin1_bin)

    即可解决。

    from http://blog.chinaunix.net/uid-24098129-id-312645.html

    http://blog.csdn.net/qiuyepiaoling/article/details/6956823

    展开全文
  • l1u8recode 是一个简单的实用程序,用于将文件从 ISO-8859-1 (latin1) 重新编码为支持混合编码和/或格式的 UTF8。 它能够处理这两种特殊情况: 重新编码可以应用于输入的分隔部分。 适用于包含文本和二进制数据的...
  • 主要介绍了ISO-8859-1Latin-1 西欧编码介绍及应用,需要的朋友可以参考下
  • 因项目需求,需要整合多个项目一起,其中一个项目因在创建数据库的时候没有设置编码格式,为默认的latin1编码。这就导致查询遇到中文的时候会出现乱码,需要进行转码操作。 二、问题处理过程(本项目为springboot+...

    以下是个人项目中采用的方法,应该还有其他更有优雅完善的方式。这里先记录下,后面碰到就可以很快填坑了
    一、问题描述:
    因项目需求,需要整合多个项目一起,其中一个项目因在创建数据库的时候没有设置编码格式,为默认的latin1编码。这就导致查询遇到中文的时候会出现乱码,需要进行转码操作。

    二、问题处理过程(本项目为springboot+mybatis):
    1、经过多次验证,发现原来数据库的插入数据格式为gbk,然而数据库编码为latin1格式的。网上给出的方案大部分是备份库,然后重新调整数据库编码格式什么的。实际情况,首先风险不说,大部分情况是不允许这么操作,如涉及到别的项目对这个已经进行过处理,如果改变了编码,也许自己项目没有问题,但也会导致别的用这个库的项目受到影响。
    2、设置项
    2.1、多数据源配置(注意加粗的地方,然后url中characterEncoding的编码格式根据实际需要设置,如果原来库中是gbk就设置为gbk):

    spring:
      datasource:
        db1:
          #jdbc-url: jdbc:mysql://host:3306/db1?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai
          url: jdbc:mysql://host:3306/db1?useUnicode=true&characterEncoding=gbk&serverTimezone=Asia/Shanghai
          username: root
          password: ***
            # 驱动
          type: com.alibaba.druid.pool.DruidDataSource
          driver-class-name: com.mysql.jdbc.Driver
          mybatis:
            type-aliases-package: com.saas.mall.jz.rmi.dao.admin
          #设置连接指定编码配置项
          connectionInitSqls: set names latin1
        db2:
          #jdbc-url: jdbc:mysql://host:3306/db2?useUnicode=true&characterEncoding=gbk&serverTimezone=Asia/Shanghai
          url: jdbc:mysql://host:3306/db2?useUnicode=true&characterEncoding=gbk&serverTimezone=Asia/Shanghai
          username: root
          password: ***
            # 驱动
          type: com.alibaba.druid.pool.DruidDataSource
          driver-class-name: com.mysql.jdbc.Driver
          mybatis:
            type-aliases-package: com.saas.mall.jz.rmi.dao.website
          connectionInitSqls: set names latin1
        db3:
          url: jdbc:mysql://host:3306/db3?useUnicode=true&characterEncoding=gbk&serverTimezone=Asia/Shanghai
          username: root
          password: ****
          # 驱动
          type: com.alibaba.druid.pool.DruidDataSource
          driver-class-name: com.mysql.jdbc.Driver
          mybatis:
            type-aliases-package: com.saas.mall.jz.rmi.dao.evyun
          connectionInitSqls: set names latin1
    

    2.2、 java配置项(多数据源需要配置,单数据源只需要配置文件中配置相应项就可以,下面为其中一个数据源的配置,注意DataSource需要是DruidDataSourceBuilder的,只有druid的数据源connectionInitSqls的配置才有用):

     package com.saas.mall.jz.rmi.config;
    
    import com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceBuilder;
    import org.apache.ibatis.session.SqlSessionFactory;
    import org.mybatis.spring.SqlSessionFactoryBean;
    import org.mybatis.spring.SqlSessionTemplate;
    import org.mybatis.spring.annotation.MapperScan;
    import org.springframework.beans.factory.annotation.Qualifier;
    import org.springframework.boot.context.properties.ConfigurationProperties;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
    
    import javax.sql.DataSource;
    
    /**
     * @Description: admin数据库数据源配置
     * @Creater: sunxiang
     * @CreateTime: 2020年12月21日 下午 14:10
     **/
    @Configuration
    @MapperScan(basePackages = "com.saas.mall.jz.rmi.dao.admin.mapper", sqlSessionFactoryRef = "adminSqlSessionFactory")
    public class DataSourceAdminConfig {
    
        @Bean("adminDataSource")
        @ConfigurationProperties(prefix = "spring.datasource.db1")
        public DataSource getDb1DataSource(){
        //注意是DruidDataSourceBuilder 而不是DataSourceBuilder,后者的话设置无效
            return DruidDataSourceBuilder.create().build();
        }
    
        @Bean("adminSqlSessionFactory")
        public SqlSessionFactory db1SqlSessionFactory(@Qualifier("adminDataSource") DataSource dataSource) throws Exception {
            SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
            bean.setDataSource(dataSource);
    
            bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath*:sqlMapper/admin/*.xml"));
            return bean.getObject();
        }
    
        @Bean("adminSqlSessionTemplate")
        public SqlSessionTemplate db1SqlSessionTemplate(@Qualifier("adminSqlSessionFactory") SqlSessionFactory sqlSessionFactory){
            return new SqlSessionTemplate(sqlSessionFactory);
        }
    }
    

    通过上面的配置,再插入和修改数据的时候在执行具体sql语句之前会将连接编码设置为 latin1格式的,保证与数据库编码一致。重点是配置文件中:connectionInitSqls: set names latin1 这个配置。具体作用自行百度下就知道了。这样就解决了插入数据的问题。
    2.3、获取数据:
    如果不做任何处理在获取数据的时候也会有乱码,因为查出来的为latin1编码格式。指导思路是对该编码转换,我的想法是:String s = new String(params.getBytes("ISO-8859-1"), "gbk");
    上述语句中 params为乱码的字段名。
    其中利用了mybatis的拦截器对所有的进行拦截处理:

    package com.saas.mall.jz.rmi.filter;
    
    import com.alibaba.fastjson.JSON;
    import com.alibaba.fastjson.JSONObject;
    import com.saas.mall.jz.rmi.util.BeanCopyUtil;
    import org.apache.ibatis.executor.Executor;
    import org.apache.ibatis.mapping.MappedStatement;
    import org.apache.ibatis.plugin.*;
    import org.apache.ibatis.session.ResultHandler;
    import org.apache.ibatis.session.RowBounds;
    import org.springframework.stereotype.Component;
    
    import java.util.ArrayList;
    import java.util.List;
    import java.util.Map;
    import java.util.Properties;
    
    @Component
    //拦截Executor类的query方法
    @Intercepts({@Signature(type = Executor.class, method = "query", args = {MappedStatement.class, Object.class, RowBounds.class, ResultHandler.class})})
    public class MybatisInterceptor implements Interceptor {
    
        @SuppressWarnings({"rawtypes", "unchecked"})
        public Object intercept(Invocation invocation) throws Throwable {
            Object result = invocation.proceed(); //执行请求方法,并将所得结果保存到result中
            if (result instanceof ArrayList) {
                List list = new ArrayList();
                ArrayList resultList = (ArrayList) result;
                for (int i = 0; i < resultList.size(); i++) {
                    Object object = resultList.get(i);
                    if (object instanceof Integer || object instanceof Long) {
                        list.add(object);
                    } else {
                        Class<?> aClass = object.getClass();
                        //对object进行转码,然后重新赋值返回,如果其他类型需要自行根据实际情况进行处理,ISO-8859-1对应的即为latin1编码
                        String s = new String(JSONObject.toJSONString(object).getBytes("ISO-8859-1"), "gbk");
                        Object object1 = JSONObject.toJavaObject(JSON.parseObject(s), aClass);
                        list.add(object1);
                    }
                }
                return list;
            }
            return result;
        }
    
        public Object plugin(Object target) {
            return Plugin.wrap(target, this);
        }
    
        public void setProperties(Properties arg0) {
        }
    }
    

    注入上面的拦截器使生效:

    import com.saas.mall.jz.rmi.filter.MybatisInterceptor;
    import org.apache.ibatis.session.SqlSessionFactory;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.boot.autoconfigure.AutoConfigureAfter;
    import org.springframework.context.annotation.Configuration;
    
    import javax.annotation.PostConstruct;
    import java.util.List;
    import java.util.Properties;
    
    @Configuration
    public class MyBatisConfig {
    
        @Autowired
        private List<SqlSessionFactory> sqlSessionFactoryList;
    
        @PostConstruct
        public void addMySqlInterceptor() {
            //自己定义的插件拦截器类,注入到sqlSessionFactory配置中
            MybatisInterceptor interceptor = new MybatisInterceptor();
            for (SqlSessionFactory sqlSessionFactory : sqlSessionFactoryList) {
                sqlSessionFactory.getConfiguration().addInterceptor(interceptor);
            }
        }
    
    }
    

    上面的操作就完美实现插入和查询的中文乱码问题。

    展开全文
  • ASCII编码采用单字节(8 Bit)存储,实际数据存储空间是7 Bit,最高位的1 Bit是奇偶校验位。 ASCII编码对于英语国家足够用了,但是却无法表达非英语国家字符到计算机编码之间的映射,如中文汉字、法语字母等。所以,...
  • python-latin1-to-utf8 将错误的 Latin-1 字符转换为 UTF-8 字符。 是对编码问题的全面描述和解释。 用法 $ python latin1-to-utf8.py Automática > Automática 相关项目
  • 尽量全部使用英文输出,因为你不知道服务器会出现什么样的编码问题。 1. UnicodeEncodeError: 'latin-1' codec can't encode characters in position 9-13: ordinal not in range(256) 类似这种的问题一般是中文编码...
  • MySQL编码latin1转utf8

    2021-01-18 20:08:40
    mysql的缺省字符集是 latin1,在使用mysql4.x的时候,很多人都是用的latin1字符集。而当使用mysql5时往往愿意使用utf8。那么我们的任务是不是要 把数据中的字符从latin1转为utf8呢?不是的。用一句不大准确,但又...
  • 若有发生这种情况,是因为虽然mysql本身及网页都是utf-8,但是xoops却用latin1将数据传给mysql,因此最后是utf-8数据被以latin1的格式储存进资料库。其实在xoops来看没有任何问题,只是用phpmyadmin看时,就都是乱码...
  • 2.Latin1编码 3.Unicode编码 4.UTF-8编码 5. GBK编码 1.ASCII编码 ASCII码实现的是大小写英文字母,阿拉伯数字,及常用的标点符、运算符、控制字符(换行、删除等)和通信字符(文头、确认等)与计算机编码之间的...
  • 前几天一位朋友使用wordpress搭建的个人网站升级。升级完后页面内容全部变成了乱码。...修改了表的编码格式,但有一些字段比如text仍然是使用Latin1编码的。使用上面的命令可以看字段的编码格式。 show crea
  • latin1编码

    千次阅读 2015-08-31 09:45:04
    Latin1是ISO-8859-1的别名,有些环境下写作Latin-1。ISO-8859-1编码是单字节编码,向下兼容ASCII,其编码范围是0x00-0xFF,0x00-0x7F之间完全和ASCII一致,0x80-0x9F之间是控制字符,0xA0-0xFF之间是文字符号。 ISO...
  • ASCII, LATIN1, UTF8 简介

    万次阅读 2015-11-17 09:44:59
    ASCII, LATIN1, UTF8 简介 ASCII-American Standard Code for Information Interchange · Character repertoire: ASCII 严格来讲就是7个bit大小的字符集,也就是codepoint介于0-127之间的字符集合。 · ...
  • 编码ascii,latin1,utf8,gbk

    2013-07-25 09:50:05
    早期的字符集编码,使用1个字节的后7位可以表示128个字符 分别是:大小写字母,数字,标点符号,非打印字符及控制符. Latin1 ISO 8859-1 Latin1 扩展欧洲语言 使用128-255表示拉丁字符中的特殊字符. Unicode 支持欧洲,...
  • 这个老系统最早只是考虑了欧美市场,所以数据库是Latin1编码,而后来的亚太市场则采用了UTF8的存储编码。A国被安置在了亚太的技术栈,所以数据是UTF8的。 虽然存储在各国不同,但是访问存储的客户端代码是一个包...
  • 数据库字符集为latin1时,navicat for mysq中打开该数据库出现中文乱码,解决办法: 右键点击 数据库服务器,选择“连接属性…”,在连接属性弹窗中选择“高级”页签,去掉‘使用MySQL字符集’勾选项,编码处选择...
  • 程序处理这是一个历史遗留系统, 旧的系统是C++开发的, 插入数据的时候, 没有统一MYSQL各个层次(服务器, 数据库, 表, 列)的编码, 这个情况基本上是MYSQL的默认安装导致的, 实际的数据编码LATIN1, 而采用Java 开发的...
  • 0000-00ff之间的字符编码,方便查阅,很好的资料。
  • MySQL 的 latin1 编码, 不是ISO-8859-1编码。 可以使用下列方式进行转换 Encoding iso = Encoding.GetEncoding("ISO-8859-1"); Encoding utf8 = Encoding.UTF8; byte[] utfBytes = utf8.GetBytes(Message); byte...
  • 此方法针对latin1编码存储数据的数据库(插入的数据编码格式未知)。使用php读出数据,需要加入mysql_query(“SET NAMES ‘LATIN1′”)此时会发现latin1输出的中文乱码在页面显示已经可以正常(页面的编码是gbk,这时...
  • mysql的latin1字符集支持所有字符集

    千次阅读 2021-01-25 19:02:43
    1. 先来看看latin1 (参考百度百科)Latin1是ISO-8859-1的别名,有些环境下写作Latin-1。ISO-8859-1编码是单字节编码,向下兼容ASCII,其编码范围是0x00-0xFF,0x00-0x7F之间完全和ASCII一致,0x80-0x9F之间是控制字符...
  • mysql latin1 支持中文吗

    2021-01-19 04:16:16
    展开全部mysqllatin1数据库支持中文编码。ISO-8859-1编码是单字节编码,向下兼容ASCII,其e5a48de588b662616964757a686964616f31333433633432编码范围是0x00-0xFF,0x00-0x7F之间完全和ASCII一致,0x80-0x9F...
  • 对于非unicode字符串(u例如u'\xc4pple',没有前缀的字符串),必须将本机编码(iso8859-1/ latin1,除非使用enigmaticsys.setdefaultencoding函数进行修改)解码为unicode,然后编码为可以显示所需字符的字符集,在这种...
  • mysql 这货,默认的编码latin1 (例如 latin1_swedish_ci)。——实在不明白为什么是这样。而最近10年,主流的编码方式已经是 utf8 。mysql 中,最初采用 utf8_generalci 与其匹配,后来逐渐地使用 utf8unicode_ci ...
  • 1.需求:原数据latin1编码,要取数据到测试服务器,不想用原来的latin1编码了。2.操作: a.公司同事,把导出来的latin1编码的数据库导出文件给我,中文一堆乱码,乱码是这样的 çŒ«â€œæŠ“抓â€çš„...
  • linux下 vim 打开中文乱码latin1

    千次阅读 2021-05-08 21:18:48
    :edit ++enc=utf-8[zz]http://blog.sina.com.cn/s/blog_8f398540010158fh.html最后来看看处理中文文档最典型的几种情况和设置方式:1,系统locale是utf-8(很多linux系统默认的locale形式),编辑的文档是GB2312或GBK...
  • mysql移置之将latin1编码更换为utf-8编码 由 ADMIN · 发布日期 2011年05月23日 · 已更新 2011年09月5日  mysql移植含有中文的数据时,很容易出现乱码问题。很多是在从mysql4.x向mysql5.x...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 50,133
精华内容 20,053
关键字:

latin1是什么编码