Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/395.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在从多种语言读取数据时避免垃圾字符?_Java_Php_Mysql_Utf 8_Character Encoding - Fatal编程技术网

Java 如何在从多种语言读取数据时避免垃圾字符?

Java 如何在从多种语言读取数据时避免垃圾字符?,java,php,mysql,utf-8,character-encoding,Java,Php,Mysql,Utf 8,Character Encoding,我正在解析来自10多种不同语言的rss新闻源 在用php编写API响应客户端之前,所有解析都是用java完成的,数据存储在MySQL中 我在读取数据时经常遇到垃圾字符 我试过什么: 我必须存储utf-8数据。我的数据库、表甚至列的默认字符集都是UTF8 在连接数据库时,我设置了 当我手动运行jar文件来插入数据时,字符的大小看起来很好。但当我为同一个jar文件设置cronjob时,我又开始重新面对这个问题 在英语中,我尤其面临着一些问题,比如在其他方言中,这个字符看起来完全是加比语,我甚至连一个

我正在解析来自10多种不同语言的rss新闻源

在用php编写API响应客户端之前,所有解析都是用java完成的,数据存储在MySQL中

我在读取数据时经常遇到垃圾字符

我试过什么:

  • 我必须存储utf-8数据。我的数据库、表甚至列的默认字符集都是UTF8
  • 在连接数据库时,我设置了
  • 当我手动运行jar文件来插入数据时,字符的大小看起来很好。但当我为同一个jar文件设置cronjob时,我又开始重新面对这个问题

    在英语中,我尤其面临着一些问题,比如在其他方言中,这个字符看起来完全是加比语,我甚至连一个字符都认不出来

    有什么我遗漏的吗

    垃圾字符示例:

    古吉拉特邦:“古吉拉特邦”

    马尔亚拉姆:“马尔亚拉姆”


    英语:银行董事局-欧元™s的范围将扩大到金融部门PSU

    古吉拉特邦启动
    રેલવે,对吗?然后Malyalam启动
    നേപ,对吗?英语应该包括
    局的

    这是一个典型的例子

    • 客户端中的字节以utf8正确编码。(
      Bureau
      用utf8的Ascii/latin1子集编码;但是
      不是Ascii撇号。)
    • 您可能默认使用
      集合名称拉丁1
      (或
      集合字符集(“拉丁1”)
      或…)进行连接。(应该是
      utf8
    • 表中的列已声明为
      字符集latin1
      。(或者可能是从表/数据库继承的。)(应该是
      utf8
    数据的修复是“两步改变”

    其中长度足够大,而另一个“…”具有任何其他内容(
    notnull
    等)已在列中

    不幸的是,如果您有很多列要处理,则需要进行很多修改。您可以(应该)
    在一对
    变量中为单个表将所有必要的列修改为
    VARBINARY

    代码的修复方法是将utf8建立为连接;这取决于PHP中使用的api。
    ALTERs
    将更改列定义

    编辑


    您的
    VARCHAR
    字符集
    错误。因此,您可以看到Mojibake类似于
    的«-》
    。大多数转换技术都试图保留
    中的«code>,但这不是您所需要的。相反,在忽略表示拉丁1编码字符的位的旧定义的同时,采取步骤
    VARBINARY
    保留位。第二步再次保留位,但现在声称它们代表utf8字符。

    jar文件如何组合插入数据库的数据?通过stdin?通过文件?如果需要特定的帮助,您需要显示一些代码。这里是猜测,但系统默认代码页(由“cron”拾取)可能是“C”。i、 e.简单的老式ASCII码。或者将java封装在一个脚本中,该脚本将环境设置为“LANG=UTF-8”。或者在java代码中以UTF-8的形式显式打开文件?我目前正在使用varchar。@HIRATHAKUR-VARBINARY只是一个垫脚石。它用于在应用新编码之前“忘记”旧编码。在一个步骤中进行转换将失败,因为它会误解原始内容。
    ALTER TABLE Tbl MODIFY COLUMN col VARBINARY(...) ...;
    ALTER TABLE Tbl MODIFY COLUMN col VARCHAR(...) ... CHARACTER SET utf8 ...;