簡體   English   中英

顯示日文字符的問題

[英]Display problem with Japanese characters

我從Oracle數據庫中獲取日語字符串並將其顯示在瀏覽器上。 但是這些字符在瀏覽器上顯示為???。 使用unistr()函數將日語字符串插入DB。

INSERT INTO MESSAGES (MESSAGE_ID,MESSAGE) VALUES (1,unistr('\0041\0063\0063\0065\0073\0073\0020\004d\0061\006e\0061\0067\0065\006d\0065\006e'));    

當我打印System.getProperty("file.encoding")時,我在我的jvm日志ISO8859-1得到了這個。

select * from v$nls_parameters where parameter in ('NLS_CHARACTERSET')在我的數據庫中產生UTF8

有關如何正確顯示日文字符的任何指示?

您正嘗試將ISO8859-1更改為utf-8。

如果struts中的上述問題在java.jsp頁面上使用此代碼

<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>

嘗試更改瀏覽器區域設置。 你可以用Firefox做到這一點。

就Unicode編碼而言,服務器對瀏覽器的響應的字符似乎被錯誤地指定。 如果你正在使用Tomcat,那么關於這個主題有一個相當詳細的SO問題 請注意,您必須使用UTF-8而不是ISO-Latin-1 / ISO-8859-1,因為日語字符不屬於Latin-1字符編碼。

除了關於Unicode編碼的指針之外,您可能還想檢查以下幾點:

  • 數據庫中的數據是否以您希望的方式存儲? 您可以使用Oracle SQL Developer之類的工具(默認情況下支持Unicode;我不確定日語字體,但您可以切換到它們)來查看數據庫表的內容。
  • 您是否為應用程序服務器JVM設置了正確的編碼?
  • 您是否正在查看為瀏覽器安裝日語字體的頁面以及日語語言環境?

如果您排除了以上所有問題,那么Unicode字符(包括日語)將被轉換為不可理解的格式。

清單:

  1. 檢查您的瀏覽器區域設置(由duffymo建議)。
  2. 您是否安裝了亞洲字體(如果正在運行窗口)。 瀏覽www.yahoo.co.jp - 你能在這里看到日文字符嗎?
  3. 如果您有日語字體和日語語言環境,請嘗試直接運行以下語句:

從雙重選擇unistr('\\ 0041 \\ 0063 \\ 0063 \\ 0065 \\ 0073 \\ 0073 \\ 0020 \\ 004d \\ 0061 \\ 006e \\ 0061 \\ 0067 \\ 0065 \\ 006d \\ 0065 \\ 006e')

如果#3成功,則表中消息字段的文件編碼不正確。

如果你看到??? 在webbrowser中,然后根據其他人的建議更改瀏覽器的locale / charset確實無濟於事。 只有當你看到,空位和/或變為亂碼 ,那么它可能確實幫助。 安裝字體也確實無濟於事。 如果沒有它的字體,你會在Firefox中看到里面有十六進制的方塊和IE空方塊,真的不是???

??? 這里只能有一個原因:您使用錯誤的編碼將這些字符寫入HTTP響應。 平均網絡服務器將替換未知字符? webbrowser不這樣做,它只是按原樣顯示它們。 實際上,理論上還有另一個可能的原因; 當您插入未知字符時,數據庫將執行相同的操作,但這里排除的內容較少或更多。

目前還不清楚你正在使用什么樣的視圖技術,但是既然你在談論Java和webbrowser,我會假設你正在使用JSP / Servlet(將來,請提及並標記為這樣,以便將達到正確的觀眾)。

如果您使用JSP顯示這些字符,則需要將以下內容添加到JSP頁面的頂部,以指示servletcontainer使用正確的編碼來編寫這些字符:

<%@ page pageEncoding="UTF-8" %>

如果您使用Servlet手動編寫這些字符,那么在向其中寫入任何字符之前 ,需要將HTTP servlet響應設置為使用正確的編碼,如下所示:

response.setCharacterEncoding("UTF-8");

也可以看看:

  1. 首先, \\0041\\0063\\0063\\0065\\0073\\0073\\0020\\004d\\0061\\006e\\0061\\0067\\0065\\006d\\0065\\006e似乎不是有效的日語UTF-8字符串(它表示UTF-8中的"Access Managemen" 如果要在CHAR列中插入日文字符,請嘗試unistr('\\306b\\307b\\3093\\3054') (在UTF-8中表示"にほんご" )。
  2. JDBC驅動程序識別數據庫實例的NLS_CHARACTERSET,所以此時,如果你查看resultSet.getString(2);的返回值resultSet.getString(2); 使用調試器,您將看到插入的日語字符串。
  3. 要使用JSP將UTF-8字符串寫入HTML,您必須在頭部寫入<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> JSP文件 JSP的默認編碼是ISO-8859-1(參見https://docs.oracle.com/cd/E17802_01/j2ee/j2ee/1.4/docs/tutorial-update6/doc/WebI18N5.html ),它無法處理日文字符。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM