gpt4 book ai didi

javascript - UTF-8:从 Ajax 客户端到 Tomcat 服务器的希伯来字符集

转载 作者:行者123 更新时间:2023-11-28 23:25:11 26 4
gpt4 key购买 nike

当我将数据 [希伯来语字符] 从浏览器传输到 Web 服务时,我遇到了问题。Browser js 端和 java 端没有问题,但是当我在它们之间传输数据时出现问题。

AJAX - setRequestHeader

var hebrewData = 'יאש';
var encodeData = encodeURIComponent( hebrew );

console.log('Encoding Before :', hebrewData, '\nAfter :', encodeData);
var xmlhttp = new XMLHttpRequest();

// Method: POST; Encoding type: application/x-www-form-urlencoded (default):
xmlhttp.open("POST","http://localhost:8088/WebApplication/Service", true);
xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");
xmlhttp.send("data="+encodeData+"&userid="userid );

保存为 UTF-8 的 Web 服务 Java 文件

String hebrew = "חוּט";     
System.out.println("Lan : "+hebrew);

我已经尝试过这些可能的方法;

XMLHttpRequest.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8");

从 java getParameter() 开始使用 ISO-8559-1 而不是 UTF-8改了,Tomcat HTTP Connector使用 URIEncoding="UTF-8"(或)useBodyEncodingForURI="true"

In servlet « request.setCharacterEncoding("UTF-8");
tomcat server.xml « <Connector port="8010" protocol="AJP/1.3" redirectPort="8443" URIEncoding="UTF-8" />

但我无法获得正确的输出。

最佳答案

我已经尝试了这些可能的方法来将数据从 Java 保存到 DB,Servlet 到 DB,下面将逐步清楚地提到。


➩ As Windows OS uses CP1252 character encoding by default. So, changed code page value to 65001 - Unicode (OR) windows-1255 - ANSI Hebrew

  • Java程序
public class My {
public static void main(String args[]) throws java.io.UnsupportedEncodingException {
System.setProperty("file.encoding","UTF-8");
System.out.println("Default Charset = " + java.nio.charset.Charset.defaultCharset());

String పేరు = "Yash";
System.out.println("UNICODE - Identifier[Variable Name] : " + పేరు);

String hebrew = "יאש";
System.out.println("UNICODE - Literal[Variable value] : "+ hebrew );

System.out.println("windows-1255 : " + new String(hebrew.getBytes("UTF-8"), "UTF-8") );
}
}

Compiling Java program Manually which is written using Text Editor Notepad++.

即使附加 JAVA_OPTS 也无济于事。当我们编译一个具有 Unicode 字符的 Java 文件时,我们得到这个错误

error: unmappable character for encoding Cp1252
➩ As Windows OS uses CP1252 character encoding by default.

D:\Yash>set JAVA_OPTS=%JAVA_OPTS% -Dfile.encoding=UTF-8 -Dsun.jnu.encoding=UTF-8
D:\Yash>javac -encoding UTF-8 -target 1.7 My.java
« -encoding <encoding> Specify character encoding used by source files.
« -target <release> Generate class files to support lowest specified version[1.7] and above[1.8]
For Example: trywithresource feature of 7 will not work on 6.
D:\Yash>java -Dfile.encoding=UTF-8 My
« -D<name>=<value> set a system property

O/P :- Unable to print UTF-8 characters on console command prompt, So go for Eclipse IDE
Default Charset = UTF-8
UNICODE - Identifier[Variable Name] : Yash
UNICODE - Literal[Variable value] : ×™×ש
windows-1255 : ×™×ש

From Eclipse Editor

中支持 Unicode Eclipse 保存Workspace|Class文件编码为UTF-8

Class ➩ Project ► properties ► Run/Debug ➤ settings Eccoding - UTF 8 (OR)
WorkSpace ➜ Preferences ► General ► Workspace ► Text file encoding UTF-16

或者将文件保存为另存为UTF-8 enter image description here


MySQL DB « 变化 Collation数据库名称|表到utf8_general_ciConfiguration settings file为了支持 Unicode。

MySQL 的其他几种语言接口(interface)都基于 C 客户端库。 mysql-connector-java [ 5.1.34 ]

  1. 测试查询:

    CREATE TABLE IF NOT EXISTS `unicodeinfo` (
    `id` int(5) NOT NULL AUTO_INCREMENT,
    `UserName` varchar(21) COLLATE utf8_unicode_ci NOT NULL,
    `Language` varchar(20) COLLATE utf8_unicode_ci NOT NULL,
    `Message` varchar(150) CHARACTER SET utf8 NOT NULL,
    PRIMARY KEY (`id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=6 ;
  2. 样本 Java Example to insert record .

    public static void insertAutoIncrement_SQL(String UserName, String Language, String Message) {
    String DB_URL = "jdbc:mysql://localhost:3306/test", DB_User = "root", DB_Password = "";

    String insertSQL = "INSERT INTO `unicodeinfo`( `UserName`, `Language`, `Message`) VALUES (?,?,?)";
    //"INSERT INTO `unicodeinfo`(`id`, `UserName`, `Language`, `Message`) VALUES (?,?,?,?)";
    int primkey = 0 ;
    try {
    Class.forName("com.mysql.jdbc.Driver").newInstance();
    Connection conn = DriverManager.getConnection(DB_URL, DB_User, DB_Password);

    String columnNames[] = new String[] { "id" };

    PreparedStatement pstmt = conn.prepareStatement( insertSQL, columnNames );
    pstmt.setString(1, UserName );
    pstmt.setString(2, Language );
    pstmt.setString(3, Message );

    if (pstmt.executeUpdate() > 0) {
    // Retrieves any auto-generated keys created as a result of executing this Statement object
    java.sql.ResultSet generatedKeys = pstmt.getGeneratedKeys();
    if ( generatedKeys.next() ) {
    primkey = generatedKeys.getInt(1);
    }
    }
    System.out.println("Record updated with id = "+primkey);
    } catch (InstantiationException | IllegalAccessException | ClassNotFoundException | SQLException e) {
    e.printStackTrace();
    }
    }

如果您使用 ConnectionPool DBCP 使用值为 connectionProperties="useUnicode=yes;characterEncoding=utf8;" 的 connectionProperties


  • 部署在 Tomcat server 上的 Java 服务器程序:

    为了完全切换到使用 UTF-8,您需要进行以下更改:

    1. 在您的 <Connector> 上设置 URIEncoding="UTF-8"在 server.xml 中。

    <Connector connectionTimeout="20000" port="8080" protocol="HTTP/1.1" 
    redirectPort="8443" URIEncoding="UTF-8"/>
    1. 使用字符编码 filter 默认编码设置为 UTF-8。

    <filter>
    <filter-name>CharacterEncoding</filter-name>
    <filter-class>org.apache.catalina.filters.SetCharacterEncodingFilter</filter-class>
    </filter>
    <filter-mapping>
    <filter-name>CharacterEncoding</filter-name>
    <url-pattern>/msg/*</url-pattern>
    </filter-mapping>
    1. 更改所有 servlet 以设置响应的内容类型,并将内容类型中的字符集名称包含为 UTF-8。 使用 response.setContentType("text/html; charset=UTF-8")response.setCharacterEncoding("UTF-8") .
@WebServlet(urlPatterns = { "/msg/locale", "/locale" }, loadOnStartup = 1 )
public class UnicodeTest extends HttpServlet {

private static final long serialVersionUID = 5081877L;

protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//response.setCharacterEncoding("UTF-8");

String unicodeMessage = URLDecoder.decode( request.getParameter("message"), "UTF-8");
// request.getParameter("message"); // "××ש"
//new String(request.getParameter("message").getBytes("ISO-8859-1"), "UTF-8");
System.out.println("Unicode Message :"+ request.getParameter("message") );

try {
System.out.println("windows-1255 : " + new String(unicodeMessage.getBytes("UTF-8"), "UTF-8") );
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}

UnicodeChars.insertAutoIncrement_SQL("Yash_777", "Telugu", unicodeMessage);

PrintWriter writer = response.getWriter();
if( unicodeMessage != null & !unicodeMessage.equals("") ) {
writer.append("Received Message : "+ URLEncoder.encode( unicodeMessage, "UTF-8"));
} else {
writer.append("Not Received any Message.");
}
writer.flush();
writer.close();
}
}

使用 Javascript 的 Ajax 请求:

var methodHTTP = 'GET'; // "POST", "GET", "PUT"
var serverURL = 'http://localhost:8080/SteamingServlet/msg/locale';
var queryString = 'יאש'; // 'యశ్వంత్ ' // 'यश'
var enobjects = 'message='+ encodeURIComponent( queryString );

var xmlhttp = new XMLHttpRequest();

if( methodHTTP == 'GET' ) { console.log( "XMLHttpRequest - GET" );

xmlhttp.open(methodHTTP, serverURL+'?'+enobjects, true);

xmlhttp.setRequestHeader("Content-type","application/x-javascript; charset=UTF-8");
xmlhttp.setRequestHeader("Access-Control-Allow-Origin","*");

xmlhttp.send( );
} else { console.log( "XMLHttpRequest - POST" );

xmlhttp.open(methodHTTP, serverURL, true);
xmlhttp.setRequestHeader("Content-type","application/x-javascript; charset=UTF-8");
xmlhttp.setRequestHeader("Access-Control-Allow-Origin","*");

xmlhttp.send( enobjects );
}

xmlhttp.onreadystatechange = function() {
if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
console.log("Message :: ", xmlhttp.responseText);
console.log("Decoded Message :: ", decodeURIComponent( xmlhttp.responseText ) );

} else {
console.log("Status Code : ", xmlhttp.status);
}
}

关于javascript - UTF-8:从 Ajax 客户端到 Tomcat 服务器的希伯来字符集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38308963/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com