Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/245.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中显示不好,但在php中可以吗?_Java_Php - Fatal编程技术网

俄语字符在java中显示不好,但在php中可以吗?

俄语字符在java中显示不好,但在php中可以吗?,java,php,Java,Php,我们有一个web应用程序,其中可以插入俄语字符,在mysql数据库中,它看起来像这样。但是当在网络上查看时,它会以俄文字符形式正确显示。但是,当我们在java应用程序中执行此操作时,它会以这种格式显示出来?有什么帮助吗 下面是部分java代码 Statement stmt1 = null; //System.out.println("\n\nSELECT selectOTACommand : "+selectOTACommand);

我们有一个web应用程序,其中可以插入俄语字符,在mysql数据库中,它看起来像这样。但是当在网络上查看时,它会以俄文字符形式正确显示。但是,当我们在java应用程序中执行此操作时,它会以这种格式显示出来?有什么帮助吗

下面是部分java代码

Statement stmt1 = null;
                         //System.out.println("\n\nSELECT selectOTACommand : "+selectOTACommand);
                         String select1 = "Select locName from tblLoc where locID=2280"
                         ResultSet rs1= stmt1.executeQuery(select1);
                         while(rs1.next()) 
                         {
                            System.out.println("Loc Name : "+rs1.getString("locName"));

                         }      

                          try{
                            if ( rs1 != null ){
                              rs1.close();
                            }
                            else{
                                System.out.println("MyError:rs1 is null in finally close");
                            }
                            if ( stmt1 != null ){
                              stmt1.close();
                            }
                            else{
                                System.out.println("MyError:stmt1 is null in finally close");
                            }
                          }
                          catch(SQLException ex){
                                System.out.println("MyError:SQLException has been caught for stmt1 close");
                                ex.printStackTrace(System.out);
                          }  

您必须在三个地方设置所使用的编码,这样它就可以了,并且应该是这样的

  • php
  • mysql数据库和表
  • php用来与mysql通信的链接(这是大多数ppl所缺少的)这里有两个选项。phps'
    mysql\u set\u charset()
    ->或通过两个查询执行此操作
    set name'charset\u name'
    +
    set charset\u name
  • 表示它是windows-1251编码。
    你可能应该这样做。

    我建议,正如尼古拉上面所说,设置名称“utf8”可以解决你的问题。您必须说明您的客户机将使用什么字符集编码来发送SQL语句,以及它希望以什么字符集编码来接收结果。集合名称影响所有这些设置。

    请先阅读

    之后,让我们看看PHP脚本,以及它如何与其他组件交互。p> PHP脚本接收来自客户端/浏览器的输入,显然是utf-8编码的。也就是说,如果客户端发送字符Б,它将发送两个字节0xD0和0x94。
    如果您将这两个字节解释为/显示为例如iso-8859-1编码,则会得到两个字符:Д(与您的问题文本中相同)。
    您的PHP脚本获取这两个字节并将它们传递给MySQL。MySQL现在也必须解析/解释这些字节。这涉及到相当多的编码/字符集相关设置,但让我们将其简化为:有一个字符集与php和mysql之间的连接相关联,有一个字符集用于“在”mysql服务器中存储数据。(有关更多信息,请阅读)。
    看起来您的案例中的连接字符集类似于iso-8859-1。也就是说,MySQL服务器将0xD0,0x94解释为两个字符,而不是

    Б
    当php脚本从MySQL服务器返回数据时,服务器会发送两个字符,
    Ð
    。由于连接字符集phpmysql仍然是iso-8859-1,MySQL服务器将这两个字符再次编码为0xD0和0x94。
    PHP获取这两个字节(没有关于utf-8的线索,但在本例中这并不重要),并将其发送回客户端。
    客户端现在必须解释这两个字节。在您的情况下(“在web上查看时”),客户端很可能从http响应中的头或html文档中的等效参数获取有关编码的信息。这个参数似乎是“流是utf-8”编码的。因此,两个字节0xD0,0x94再次显示为
    crmk_
    。因此,从客户机/网络浏览器的角度来看,一切都很好,php不关心错误,MySQL在这种情况下也不关心。(php脚本“内部”和MySQL服务器“内部”可能会出现问题…)

    所以,这里的一切看起来都很好——但是……这主要是因为php不在乎。另一方面,Java通常会这样做。
    也就是说,当MySQL服务器发送两个“字符”
    Ð
    时,它们将在java应用程序中作为两个单独的字符处理。当这两个字符被发送到客户机时,客户机会将它们解释为两个独立的字符,以此类推。(至少在默认情况下,通常会有更多的自动处理。)
    与您用来窥视MySQl数据库的前端相同。显然,它正确地处理了编码,因此显示的是


    • 确保数据库/表列编码可以处理必须存储的字符;utf-8可以做到这一点。看
    • 确保您的php脚本将连接编码设置为utf-8,因为脚本似乎从客户端接收到了utf-8,无需首先将其转换为另一个字符集。如何做到这一点取决于您用于连接MySQL服务器的API:
    (mysql_connect):此模块已被弃用,请考虑使用另一个模块,如mysqli或pdo。设置连接字符集的正确方法是

    mysql_set_charset('utf-8', $mysql);
    
    该函数是php>=5.2.3,但任何其他方法,如
    SET NAMES
    都会使客户端库对连接字符集一无所知,因此mysql\u real\u escape()可能无法正常工作。看

    (新建MySQLi(),MySQLi_connect):请参阅

    (新的PDO('mysql:…'):


    PHP>=5.3.6,请参见

    Java渲染是否使用UTF-8?西方统一码?可能是Java正在使用的字符集。“有什么帮助吗?”-只需正确指定编码,这是一个很简单的问题。你的问题是什么?@ZagorulkinDmitry我已经把这段java代码放进去了。谢谢。您在哪里看到这个输出(console/JSP)?我在console-it-self中看到它,因为这是一个作为守护进程运行的java应用程序。现在对于php来说,它工作得很好,因为我可以插入并查看它。现在的问题在java中……这(最有可能)是因为php应用程序出错了,但您没有注意到,因为它在输入和输出方式上都出错了,还有两个错误——在本例中——相互取消;-)java不是我的专长,但是如果java默认在utf8中运行,你可以尝试与步骤3相同的方法:),但是从java的角度来看。@那么我应该通过php做什么呢?它应该在java中正常工作吗?好的,我很困惑,php+mysql是否正常工作?你呢
    $pdo = new PDO('mysql:host=HOSTNAME;port=3306;dbname=DATABASENAME;charset=utf8');