精华内容
下载资源
问答
  • Java 读取文件时的字符集配置1.1 默认字符集1.2 配置 Java 字符集1.3 IDEA 调试程序时的陷阱2. utf-8utf-8 No Bom3. ObjectMapper 与 bom测试代码 1. Java 读取文件时的字符集配置 1.1 默认字符集 比如在 ...

    1. Java 读取文件时的字符集配置

    utf-8 文本文件 test.txt

    {
    	"name": "shanghai",
    	"label": "\"上海\""
    }
    

    1.1 默认字符集

    比如在 Windows 平台,打开 CMD,可以查看本地字符集:
    在这里插入图片描述

    public static void main( String[] args )
        {
            try ( FileReader r = new FileReader("test.txt")){
                System.out.println(r.getEncoding()); // 查看 Java 解析文本所用的字符集
                char[] buf = new char[100];
                r.read(buf);
                System.out.print(buf);
            } catch (Exception e){
                e.printStackTrace();
            }
        }
    

    编译程序,生成 demo.jar,执行:

    java -jar demo.jar

    打印出来的结果为 GBK! 文本解析出现乱码,因为文件编码是 utf-8。

    1.2 配置 Java 字符集

    可以肯定的是,Java 程序并不会去识别文件本身到底是什么格式,而是根据配置的字符集去解析文本文件。

    默认情况下,会读取系统本地的字符集配置,当然也可以自定义。

    方法 1、 通过命令行参数配置: -Dfile.encoding

    java -jar -Dfile.encoding=UTF-8 demo.jar

    文件的解析编码为 UTF8,内容解析正确!

    方法 2、通过编码进行配置:
    当通过命令行配置时,会影响整个程序解析文本的方式,有时候,想对特定文件指定特定的解码方式,就需要在代码中进行设定了!

    Java 中 InputStreamReader 负责将从文件中读取的字节流转换为字符流,可以指定字符集。
    在这里插入图片描述

    代码如下:

    String encoding = new InputStreamReader(new FileInputStream("test.txt"), "utf-8").getEncoding()
    System.out.println(encoding); // utf-8
    

    1.3 IDEA 调试程序时的陷阱

    IDEA 调试程序时,会添加很多参数,包括字符集配置。

    可以通过 Jconsole 查看 IDEA 启动的 Java 程序的 VM 参数,如下:
    在这里插入图片描述

    因此,在读取外部文件时,如果该文件是 utf-8 格式,那么通过 IDEA 调试时,读取并解析文件是没有问题的,但当通过 java 命令执行程序时,如果没有指定 -Dfile.encoding 参数,且本地字符集配置的是 GBK,就会出现错误(乱码),而这种错误显得很诡异,因为在测试环境上有问题,本地调试却无法复现!!!!

    2. utf-8 与 utf-8 No Bom

    首先,UTF-8 不需要 BOM,尽管 Unicode 标准允许在 UTF-8 中使用 BOM。不含 BOM 的 UTF-8 才是标准形式,在 UTF-8 文件中放置 BOM 主要是微软的习惯。

    在 Windows 平台,用记事本打开并保存的文件,默认就是 utf-8 bom 文件,bom 文件会在文件头上添加 EF BB BF 字节流。

    使用 ultra edit 查看 test.txt 的十六进制内容:
    utf-8 no bom
    在这里插入图片描述

    utf-8 bom
    在这里插入图片描述

    使用 ultra edit 可以将文件另存为期望的格式:
    在这里插入图片描述

    此外, IntellJ IDEA 创建和保存的文本文件是 no bom 的,毕竟 Java 是平台无关的!!!

    3. ObjectMapper 与 bom

    编程语言一般都是平台无关的,因此 bom 文件常常会诱发一些错误!

    Java 本身就是平台无关的,所以当 Java 在读取 utf-8 bom 文件时并不会自动忽略掉 Windows 为文件添加的 EF BB BF 文件头,而是将 EF BB BF 视作文件内容。

    因此当使用 ObjectMapper 将文件中的 json 字符串转换为 Object 时,utf-8 bom 文件会报错!

    com.fasterxml.jackson.core.JsonParseException: Unexpected character ('' (code 65279 / 0xfeff)): expected a valid value (number, String, array, object, 'true', 'false' or 'null')

    这时,需要将文件转存为 no bom 格式!

    测试代码

    import com.fasterxml.jackson.databind.ObjectMapper;
    import java.io.FileReader;
    
    public class Demo
    {	
    	public static class Data {
            String name;
            String label;
    
            public String getName() {
                return name;
            }
    
            public void setName(String name) {
                this.name = name;
            }
    
            public String getLabel() {
                return label;
            }
    
            public void setLabel(String label) {
                this.label = label;
            }
    
            @Override
            public String toString() {
                return "Data{" +
                        "name='" + name + '\'' +
                        ", label='" + label + '\'' +
                        '}';
            }
        }
    
    	public static void main(String[] args)
    	{
    		try ( FileReader r1 = new FileReader("test.txt");
    			  FileReader r2 = new FileReader("test.txt")){
    
                Data d = new ObjectMapper().readValue(r1, Data.class);
                System.out.println(d);
    
                System.out.println(r2.getEncoding());
                char[] buf = new char[100];
                r2.read(buf);
                System.out.print(buf);
            } catch (Exception e){
                e.printStackTrace();
            }
    }
    
    展开全文
  • MySQL数据库字符集utf8如何转utf8mb4

    万次阅读 2019-05-07 17:08:48
    这几天开发的项目需要把Emoji 表情保存到数据库,原来的Mysql数据库的编码是utf8的,这就导致保存的时候报如下错误: java.sql.SQLException: Incorrect string value: '\xF0\x9F\x92\x95\xF0\x9F...' for column...

           这几天开发的项目需要把Emoji 表情保存到数据库,原来的Mysql数据库的编码是utf8的,这就导致保存的时候报如下错误:

    java.sql.SQLException: Incorrect string value: '\xF0\x9F\x92\x95\xF0\x9F...' for column…………

           mysql的utf8并不是真正意义上的utf8,mysql的utf8只支持最长三个字节,所以Emoji 表情和有些生僻字以及任何新增的 Unicode 字符等如果超过三个字节用utf8字符集保存是会报错的。mysql在5.5.3之后增加了utf8mb4这个字符集,mb4就是most bytes 4的意思,专门用来兼容四字节的unicode。好在utf8mb4是utf8的超集,除了将编码改为utf8mb4外不需要做其他转换。

           为了获取更好的兼容性,应该总是使用 utf8mb4 而非 utf8.  对于 CHAR 类型数据,utf8mb4 会多消耗一些空间,根据 Mysql 官方建议,使用 VARCHAR  替代 CHAR。

           因为mysql的char列类型在utf8mb4下, 为了保证所有的数据都存的下, char将会占用字符数*4的字节数 (mysql的char列类型utf8将占用字符数*3的字节数), 以保证空间分配足够. 所以建议用可变长度varchar, 以节省空间. 可变长度消耗的存储空间为: 实际存储需要的字节数+1或2个字节表达的长度。

            使用utf8mb4要求:

    1.MySQL版本要求:不低于5.5.3(mysql是在5.5.3之后增加了utf8mb4这个字符集)
    2.JDBC驱动版本要求:mysql connector版本高于5.1.13

            可以使用如下sql查看数据库及服务器的字符集/编码集情况:

    show variables like '%character%';
    show variables like 'collation%';
    

             

          将数据库和已经建好的表也转换成utf8mb4

              更改数据库编码(字符集):ALTER DATABASE DATABASE_NAME  DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;

              更改表编码(字符集)(注意:这里修改的是表的字符集,表里面字段的字符集并没有被修改):ALTER TABLE TABLE_NAME DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci; 

              更改表编码(字符集)和表中所有字段的编码(字符集):

    ALTER TABLE TABLE_NAME CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;

     

    批量修改表和表字段编码的方法:

    MySQL批量修改数据表的字符集:https://blog.csdn.net/vfsdfdsf/article/details/90287305

    MySQL批量修改数据表和数据表中所有字段的字符集:https://blog.csdn.net/vfsdfdsf/article/details/90484891

     

    修改字符集为utf8mb4的sql语句如下(下面的语句只对当前session有效,是临时性的,永久性的请修改MySQL配置文件)

    /*来自客户端的语句的字符集*/
    set character_set_client = utf8mb4;
    /*建立连接使用的字符集*/
    set character_set_connection = utf8mb4;
    /*默认数据库使用的字符集。当默认数据库更改时,服务器则设置该变量。如果没有默认数据库,变量的值同character_set_server*/
    set character_set_database = utf8mb4;
    /*用于向客户端返回查询结果的字符集*/
    set character_set_results = utf8mb4;
    /*服务器的默认字符集*/
    set character_set_server=utf8mb4;
    

         

         修改MySQL配置文件

                      (修改MySQL配置文件是后面操作另外一个库的时候补充上来的,所以这里的utf8mb4_unicode_ci和下面截图中的utf8mb4_general_ci,有不一致的地方,朋友们根据自己的需求设置就是了。utf8mb4_unicode_ci和utf8mb4_general_ci的区别只是排序规则的不同,字符集都是utf8mb4,排序规则根据自身需求选择即可)

                      修改mysql配置文件my.cnf(windows为my.ini,我的windows下my.ini文件在C:\ProgramData\MySQL\MySQL Server 5.7目录) 
                      我的my.cnf放在/etc/my.cnf位置。找到后请在以下三部分里添加如下内容:

                      [client]
                      default-character-set = utf8mb4
                      [mysql]
                      default-character-set = utf8mb4
                      [mysqld]
                      character-set-client-handshake = FALSE
                      character-set-server = utf8mb4
                      collation-server = utf8mb4_unicode_ci
                      init_connect='SET NAMES utf8mb4'

                      截图如下(最后一句是忽略表名大小写的,有需要的可以配置上):

                             

     

           修改完成后记得重启mysql:       

           Linux:

    service mysql restart
    或者
    service mysqld restart

           Windows:

    net stop mysql
    
    net start mysql

                             停止命令:net stop mysql

                             启动命令:net start mysql

    不同的操作系统重启数据库方式不同,如果以上命令不管用,请根据操作系统在网上搜索命令

     

     

    修改前的数据库和服务器字符集我没有截图保存,下面贴上修改后的截图

    下面贴上上面各个参数的解释:

    character_set_client
    来自客户端的语句的字符集。
    
    
    character_set_connection
    建立连接使用的字符集。
    
    
    character_set_database
    默认数据库使用的字符集。当默认数据库更改时,服务器则设置该变量。如果没有默认数据库,变量的值同character_set_server
    
    
    character_set_results
    用于向客户端返回查询结果的字符集。
    
    
    character_set_ server
    服务器的默认字符集。
    
    
    character_set_system
    服务器用来保存识别符的字符集。该值一定是utf8。
    
    
    character_sets_dir
    字符集安装目录。
    
    
    collation_connection
    连接字符集的校对规则。
    
    
    collation_database
    默认数据库使用的校对规则。当默认数据库改变时服务器则设置该变量。如果没有默认数据库,变量的值同collation_server。
    
    
    collation_server
    服务器的默认校对规则。
    

    程序重新连接数据库,应该是可以保存成功了。

     

    如果修改完成后,代码中保存还是报错的话那就要修改连接数据库的配置了。

    本人使用的是阿里巴巴的druid数据库连接池:

    我在DruidDataSource配置中新增了如下配置:

    <bean id="druidDataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" abstract="true">
        <!-- 其他的与本次换字符集无关的配置我就不贴上来了 -->
        <!-- 物理连接初始化的时候执行的sql -->
        <property name="connectionInitSqls" value="set names utf8mb4;"/>
    </bean>

    jdbc数据库连接参数设置:
    删除了如下参数:useUnicode\=true&characterEncoding\=utf-8


    characterEncoding=utf8其实是会自动识别为utf8mb4,也可以不加这个参数,会自动检测。 
    而autoReconnect=true是必须加上的。

     

    如果本文有什么错误的地方烦请指出!

    如果有问题可以留言,希望本文可以帮助有需要的人。

    记得点赞哟!

     

     

    展开全文
  • java字符集转换程序(GBK到UTF-8

    热门讨论 2008-12-16 19:57:36
    该程序可以实现不同字符集的转换,比如从GBK到UTF8 本程序会递归地处理本目录及其子目录中的后缀为指定后缀的文件 由于功能不完善,最好只对一个目录执行一次操作,而且在输入字符集时要仔细
  • 涉及这些问题的博客文章包括《警察的恐怖:默认语言环境,默认字符集和默认时区》 ; 注释JDK默认数据 ; 编码问题:适用于linux和Java应用程序的解决方案 ; 愚蠢的Java字符串 ; Java:字符编码的粗略指南 ; 这篇...

    由于基于Java的应用程序通常用于各种各样的操作系统和环境中,因此Java开发人员经常会遇到与基于字符的输入和输出有关的问题 。 涉及这些问题的博客文章包括《警察的恐怖:默认语言环境,默认字符集和默认时区》注释JDK默认数据 ; 编码问题:适用于linux和Java应用程序的解决方案愚蠢的Java字符串 ; Java:字符编码的粗略指南这篇文章标题太长,不能在这里列出

    多年来,对Java进行了一些增强,以减少这些问题,但是当隐式使用默认字符集时,有时仍然存在一些问题。 《 Java Puzzlers 》一书中有一个难题(难题18),描述了与Java中“默认字符集的变量”有关的古怪之处。

    由于所有这些与Java的默认字符集有关的问题,欢迎 JEP 草案使用UTF-8作为默认字符集 ”( JDK-8187041 )出现。 除了潜在地解决与默认字符集有关的问题外,该JEP还提供了有关这些问题的详细概述以及解决这些问题的替代方案。 JEP的“动机”部分目前总结了此JEP为何重要的原因:“使用默认字符集的API对Java平台的新开发人员来说是一种危害”,“对于有经验的开发人员来说,也是一个麻烦。”

    “默认”字符集的问题由于使用不同的字符集以及JDK API中当前可用的不同方法(导致多个“默认”)而变得更加复杂。 这是要考虑的问题的细分。

    • 描述文件内容字符集的“默认”字符集可能与描述文件路径字符集的“默认”字符集不同。
    • 与用于读取/写入文件内容的字符集有关的“默认”有两种类型。
      • 某些JDK方法不允许指定字符集,并且始终仅针对该特定方法且不考虑任何语言环境或系统配置,都采用UTF-8的“默认”字符集。

    JEP 草案使用UTF-8作为默认字符集 ”将帮助解决与默认用于读取和写入文件内容的字符集有关的不同类型“默认”相关的问题。 例如,它将消除使用平台默认方法写入文件并使用始终使用UTF-8的方法读取文件(无论平台默认字符集如何)可能引起的潜在冲突。 当然,仅在平台默认不是NOT UTF-8的情况下,这才是问题。

    以下Java代码是一个简单的类,可打印出一些与字符集相关的设置。

    显示默认字符集详细信息

    package dustin.examples.charset;
    
    import java.io.ByteArrayInputStream;
    import java.io.InputStream;
    import java.io.InputStreamReader;
    import java.nio.charset.Charset;
    import java.util.Locale;
    
    import static java.lang.System.out;
    
    /**
     * Demonstrate default Charset-related details.
     */
    public class CharsetDemo
    {
       /**
        * Supplies the default encoding without using Charset.defaultCharset()
        * and without accessing System.getProperty("file.encoding").
        *
        * @return Default encoding (default charset).
        */
       public static String getEncoding()
       {
          final byte [] bytes = {'D'};
          final InputStream inputStream = new ByteArrayInputStream(bytes);
          final InputStreamReader reader = new InputStreamReader(inputStream);
          final String encoding = reader.getEncoding();
          return encoding;
       }
    
       public static void main(final String[] arguments)
       {
          out.println("Default Locale:   " + Locale.getDefault());
          out.println("Default Charset:  " + Charset.defaultCharset());
          out.println("file.encoding;    " + System.getProperty("file.encoding"));
          out.println("sun.jnu.encoding: " + System.getProperty("sun.jnu.encoding"));
          out.println("Default Encoding: " + getEncoding());
       }
    }

    下一个屏幕快照显示了在基于Windows 10的笔记本电脑上运行此简单类的结果,而未明确指定任何与字符集相关的系统属性,仅指定了file.encoding系统属性,并指定了两个系统属性file.encodingsun.jnu.encoding

    刚刚显示的图像演示了通过属性控制默认字符集的能力。 它还说明,对于此语言环境en_US的 Windows环境,文件内容和文件路径的默认字符集均为windows-1252Cp1252 )。 如果实现了本文中讨论JEP草案 ,则即使对于Windows,文件内容的默认字符集也将更改为UTF-8。

    当默认字符集更改为UTF-8时,在某些应用程序中可能会造成重大破坏。 JEP草案讨论了减轻这种风险的方法,包括通过预先将系统属性file.encoding预先设置为UTF-8来早期测试应用程序对更改的敏感性。 对于需要保留当前行为的情况(使用系统确定的默认字符集而不是始终使用UTF-8),JEP草案的当前版本建议支持指定-Dfile.encoding=SYSTEM

    JEP当前处于草稿中,并且与任何特定的JDK版本都不相关。 但是,根据JDK邮件列表上的最新帖子 ,我很乐观地认为,在不久的将来,我们会将UTF-8视为JDK未来版本中的默认字符集。

    翻译自: https://www.javacodegeeks.com/2018/02/java-may-use-utf-8-default-charset.html

    展开全文
  • java字符集与字符编码 Unicode字符集

    字符集与字符编码是两个不同的概念。

    字符集,顾名思义就是字符的集合,比如ASCII字符集包含了a-z A-Z 0-9 半角标点符号和特殊控制符号在内的128个符号。对于一个字符集来说,要正确编码转码一个字符需要三个元素:字库表、编码字符集、字符编码。字库表是所有字符的数据库,字库表决定了整个字符集能够展现表示的所有字符的范围。编码字符集,即用一个编码来表示字符在字库表中的位置,比如ASCII字符集中,A排在65位。字符编码,即编码字符集和实际存储值之间的转换关系,一般来说直接将编码字符集作为实际存储值。例如ASCII中,A排在65位,而编码后A的数值是0100 0001也即十进制的65的二进制转换结果。

     

    常见的字符集:

    Unicode:也叫统一字符集,它包含了几乎世界上所有的已经发现且需要使用的字符(如中文、日文、英文、德文等)。
      ASCII:早期的计算机系统只能处理英文,所以ASCII也就成为了计算机的缺省字符集,包含了英文所需要的所有字符。
      GB2312:中文字符集,包含ASCII字符集。ASCII部分用单字节表示,剩余部分用双字节表示。
      GBK:GB2312的扩展,但完整包含了GB2312的所有内容。
      GB18030:GBK字符集的超集,常叫大汉字字符集,也叫CJK(Chinese,Japanese,Korea)字符集,包含了中、日、韩三国语言中的所有字符。

     

    常见的字符编码:

    字符编码

     每个字符字节数

     ASCII

     1 

     UCS-2(Unicode)

     2

     UCS-4(Unicode)

     4

     UTF-8(Unicode)

     1 - 6

     UTF-16(Unicode)

     2 - 4

     GBK/GB2312(中文)

     1 - 2

     GB18030(CJK)

     1 - 4

     

    从以上介绍,我们不难区分unicode和utf-8,utf-16的关系:

    unicode是字符集,unicode分为USC-2和USC-4两种编码方式,也就是使用2个字节和4个自己来存储字符。目前存在的有UTF7,UTF8,UTF16和UTF32这几种。其中UTF-16规则对应USC-2编码,而UTF-32规则对应USC-4编码。而UTF-7和UTF8比较特殊。我们平常说的unicode编码其实就是utf-16,固定两个字节来编码字符。

     

    在java的内存中,String是以unicode(utf-16)的编码方式存储字符串。我们分析String的源码可以看到,String包含一个char[]数组,比如:“中文”,String内部就是用char[‘中’, ‘文’]数组存储,而char在java中是占两个字节,在内存中的存储方式正是unicode(utf-16)方式。

     

    展开全文
  • mysql字符集utf8mb4失效踩坑

    千次阅读 2019-08-17 17:39:13
    mysql数据表的字符集已经设置成了utf8mb4,但是通过JDBC向数据库写入4字节的emoji表情时报错,但是通过直接使用命令行插入该4字节的emoji表情时却成功了。示例如下: CREATE TABLE `user_info` ( `id` int(11) NOT ...
  • 字符集,是字符的集合,你可以把它当作一本字典,我们都知道字典与字典不一样,比如新华字典只包含汉字,日语字典只包含日语,英语字典只包含英语,而包含世界上全部字符的字典就是unicode,注意,字符集仅仅规定了...
  • AL32UTF8UTF8字符集

    千次阅读 2014-08-09 17:24:37
    客户的环境需要使用UTF8字符集,那么是使用AL32UTF8还是直接使用UTF8,这是一个问题。 Oracle的UTF8字符集由来已久,至少在8的时候就已经存在了,而对应的是UNICODE 3.0。而AL32UTF8字符集是9i才出现的,其对应的是...
  • ... 1.8 1.8 1.8 utf-8 ...
  • 源库是UTF8字符集,目的库是AL32UTF8字符集,由于汉字在AL32UTF8 中占3个字节,而在ZHS16GBK中占2个字节, 这样在导入的时候就会遇到: 今天测试的是将AL32UTF8 转换成UTF8字符集 测试环境 系统:Windows 数据库:...
  • mysql-connector-java各版本对utf8mb4字符集的支持 基于mysql5.6进行的调查 MySQL Connector/J 5.1 5.1.12及以下 这些版本不支持utf8mb4字符集 5.1.13 该版本以下两种方式均可支持utf8mb4字符集 在mysql连接字符串...
  • Java字符集检测,首先当然是使用mozilla的开源工具包universalchardet进行字符集检测,对于检测失败的,使用中文常用字进行再次检测,以更好的支持中文字符集
  • txt文本文件字符集格式转换(GBK等格式转UTF),java语句开发,运行需要java环境, DOS下运行命令:java txttoutf test.txt test8888.txt(test.txt是原始文件,test8888.txt是处理后UTF8格式的txt文件)
  • java程序在本地接受php的utf8字符串好好的,到了服务器就行了。 解决,修改vi /etc/sysconfig/i18n,修改之后ssh断开,重连后KILL你的java。   LANG="zh_CN.GB18030" LANG="en_US.UTF-8" LANG="zh_CN.UTF-8" ...
  • 这段时间在做PushServer时,需要对编码...查看过JDK中rt.jar的部分代码,也看过javamail的部分代码,总结原因如下:JDK本身并不支持UTF-7字符集。关于这个bug(传送门),很早之前就有人反馈过给SUN了,但SUN已经明确表
  • MySQL将utf8字符集改为utf8mb4

    千次阅读 2017-09-06 13:43:54
    前言 今天在查看tomcat日志时发现了一个错误:Cause: java.sql.SQLException: Incorrect string value:...在网上查找了说是mysql的字符集编码的问题,因为mysql的utf8编码最大是3个字节,而现在比较流行的emoji表情是四
  • Oracle字符集修改为UTF-8

    千次阅读 2017-06-13 09:23:16
    Oracle字符集修改为UTF-8,避免出现乱码。
  • 主要介绍了详解JDBC对Mysql utf8mb4字符集的处理,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
  • 某些媒体播放器(例如iTunes)仅支持字符集UTF-8。 创建这个简单的工具,将标签的字符集转换为UTF-8。 ID3是最常与MP3音频文件格式结合使用的元数据容器。 它允许将诸如标题,艺术家,专辑,曲目号之类的信息以及...
  • Java字符集和编解码

    千次阅读 2013-09-06 17:08:21
    Java字符集和编解码 -----------------------android培训,java培训,期待与您交流--------------------------- import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException...
  • Java字符集

    千次阅读 2012-08-22 16:05:20
    JDK1.4提供了Charset来处理字节序列和字符序列之间的转换关系,该类包含了用于创建解码器和编码器的方法,还提供了Charset所支持的字符集的方法,Charset类是不可变的。 Charset类提供了一个availableCharset()的...
  • java字符集的欺骗性

    千次阅读 2013-04-19 16:20:36
     多少程序员,在乱码中迷乱却不见字符集的偷笑。" ---------------------------------------------------------------------------------- 今天一同事突然跑来找我,说我们之间的线上系统接口突然返回...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 109,862
精华内容 43,944
关键字:

java字符集utf8

java 订阅