Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/61.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.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_Mysql_Jsf_Jsf 2_Utf 8 - Fatal编程技术网

Java 为什么阿拉伯字母没有插入数据库?

Java 为什么阿拉伯字母没有插入数据库?,java,mysql,jsf,jsf-2,utf-8,Java,Mysql,Jsf,Jsf 2,Utf 8,我正在帮助我的一个朋友。他正在使用JSF2.0和mysql创建web应用程序 在创建数据库时,他使用了下面的查询 CREATE DATABASE dbName DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci; 到目前为止,网站运行良好。今天,客户尝试输入阿拉伯语文本,他们说输出结果很奇怪。我的朋友所做的是在将数据输入数据库后,他还在另一个页面上打印相同的数据,并说恭喜,XYZ ABC添加成功。然而,他将输出视为祝贺,Ù?Ø1

我正在帮助我的一个朋友。他正在使用JSF2.0和mysql创建web应用程序

在创建数据库时,他使用了下面的查询

CREATE DATABASE dbName DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;
到目前为止,网站运行良好。今天,客户尝试输入阿拉伯语文本,他们说输出结果很奇怪。我的朋友所做的是在将数据输入数据库后,他还在另一个页面上打印相同的数据,并说恭喜,XYZ ABC添加成功。然而,他将输出视为祝贺,Ù?Ø184ا?تÙ?Ù?Ù?Ø© Ù?تÙ?Ù?Ù? صدÙ?Ù? ÙÙÙØØØØØ©添加成功。我不明白,当数据库字符设置正确时,他为什么会这样

web.xml内容如下

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
    <context-param>
        <param-name>javax.faces.PROJECT_STAGE</param-name>
        <param-value>Development</param-value>
    </context-param>
    <servlet>
        <servlet-name>Faces Servlet</servlet-name>
        <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>Faces Servlet</servlet-name>
        <url-pattern>/faces/*</url-pattern>
    </servlet-mapping>
    <session-config>
        <session-timeout>
            600
        </session-timeout>
    </session-config>
    <welcome-file-list>
        <welcome-file>faces/index.xhtml</welcome-file>
    </welcome-file-list>
    <filter>
        <filter-name>restrict</filter-name>
        <filter-class>com.sac.filter.MyFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>restrict</filter-name>
        <url-pattern>*.xhtml</url-pattern>
    </filter-mapping>
    <filter>
        <filter-name>MyFacesExtensionsFilter</filter-name>
        <filter-class>org.apache.myfaces.webapp.filter.ExtensionsFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>MyFacesExtensionsFilter</filter-name>
        <servlet-name>Faces Servlet</servlet-name>
    </filter-mapping>

    <servlet>
        <servlet-name>DisplayImage</servlet-name>
        <servlet-class>com.sac.databean.DisplayImage</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>DisplayImage</servlet-name>
        <url-pattern>/DisplayImage</url-pattern>
    </servlet-mapping>
    <servlet>
        <servlet-name>SaveMyImage</servlet-name>
        <servlet-class>com.sac.databean.SaveMyImage</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>SaveMyImage</servlet-name>
        <url-pattern>/SaveMyImage</url-pattern>
    </servlet-mapping>

<!-- for not using css and js of default richfaces   -->
    <context-param>
        <param-name>org.richfaces.SKIN</param-name>
        <param-value>plain</param-value>
    </context-param>
    <context-param>
        <param-name>org.richfaces.LoadStyleStrategy</param-name>
        <param-value>None</param-value>
    </context-param>
    <context-param>
        <param-name>org.richfaces.enableControlSkinning</param-name>
        <param-value>false</param-value>
    </context-param>
<!-- for not using css and js of default richfaces   -->    

</web-app>

javax.faces.PROJECT_阶段
发展
Facesservlet
javax.faces.webapp.FacesServlet
1.
Facesservlet
/面孔/*
600
faces/index.xhtml
限制
com.sac.filter.MyFilter
限制
*.xhtml
MyFaceXtensionsFilter
org.apache.myfaces.webapp.filter.ExtensionsFilter
MyFaceXtensionsFilter
Facesservlet
显示图像
com.sac.databean.DisplayImage
显示图像
/显示图像
SaveMyImage
com.sac.databean.SaveMyImage
SaveMyImage
/SaveMyImage
org.richfaces.SKIN
平原
org.richfaces.LoadStyleStrategy
没有一个
org.richfaces.enableControlSkinning
假的
在每个.xhtml页面上,他都有

如果你还需要什么,请告诉我


编辑1 在我的JSF过滤器中,我还添加了
req.setCharacterEncoding(“UTF-8”)
doFilter()
中。仍在数据库中,我看到
???????


编辑2 在JSF页面中,我有
,当我在JavaBean中将
fullName
值打印为
System.out.println(“输入时我的名字是“+fullName”)
m输入时,我得到的输出为
my name是

这意味着输入数据时出现问题

有人能帮帮忙吗

然而,他把产出视为祝贺,Ù?ظا?تÙ?Ù?Ù?Ø© Ù?تÙ?Ù?Ù? صدÙ?Ù? Ù?Ù?ØØØØØØ©添加成功。我不明白,当数据库字符设置正确时,他为什么会这样

这被称为。这不是DB编码问题,而是HTTP编码问题。像您那样设置请求后字符编码确实是正确的解决方案


编辑1:在我的JSF过滤器中,我还添加了
req.setCharacterEncoding(“UTF-8”)
doFilter()
中。还在数据库里我明白了吗

当连接双方都意识到自己的编码时,就会出现问号。未包含在单面编码中的发送/检索字符将替换为问号。阿拉伯语字符在ISO-8859-1中不存在,因此它们被问号取代。这就是Mojibake的不同之处,即发送字符时不检查另一方使用的编码是否真的支持该字符。最终,您将得到编码错误的字符,这些字符以无法理解的字符序列形式呈现

在这种特殊情况下,JDBC驱动程序本身就知道它默认使用ISO-8859-1将字符传输到DB,而检索到的字符是UTF-8(MySQL JDBC驱动程序不查看DB表编码,即使在您的示例中它被正确设置为UTF-8)。在将数据传输到数据库之前,您需要显式地告诉JDBC驱动程序使用UTF-8对字符进行解码。这是作为JDBC连接属性完成的,JDBC连接属性在JDBC URL中定义为查询字符串参数,如下所示:


jdbc:mysql://localhost:3306/db_name?useUnicode=yes&characterEncoding=UTF-8
如果您使用的是容器管理的数据源,那么只需按照与用户名和密码相同的方式分别指定这些属性

useUnicode=yes
characterEncoding=UTF-8
另见:
然而,他把产出视为祝贺,Ù?ظا?تÙ?Ù?Ù?Ø© Ù?تÙ?Ù?Ù? صدÙ?Ù? Ù?Ù?ØØØØØØ©添加成功。我不明白,当数据库字符设置正确时,他为什么会这样

这被称为。这不是DB编码问题,而是HTTP编码问题。像您那样设置请求后字符编码确实是正确的解决方案


编辑1:在我的JSF过滤器中,我还添加了
req.setCharacterEncoding(“UTF-8”)
doFilter()
中。还在数据库里我明白了吗

当连接双方都意识到自己的编码时,就会出现问号。未包含在单面编码中的发送/检索字符将替换为问号。阿拉伯语字符在ISO-8859-1中不存在,因此它们被问号取代。这就是Mojibake的不同之处,即发送字符时不检查另一方使用的编码是否真的支持该字符。最终,您将得到编码错误的字符,这些字符以无法理解的字符序列形式呈现

在这种特殊情况下,JDBC驱动程序本身就知道它默认使用ISO-8859-1将字符传输到DB,而检索到的字符是UTF-8(MySQL JDBC驱动程序不查看DB表编码,即使在您的示例中它被正确设置为UTF-8)。您需要明确地告诉JDB