如何让sql2k支持简体,繁体中文,及英文 unicode要修改表结构,比较麻烦. 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 是不是将数据存储为nchar,nvarchar等unicode数据类型就可以解决了??? 唉,怎么不去找竹之草回答过的帖子呢?About Unicode1. Guide line2. OS Setup3. MSSQL server setup4. Database Fields5. JDBC driver Setup6. Client Side Setup7. Report Coding8. OthersGuide Line:目的: 使我們的程式可以正常工作於簡繁體混合的運行環境中.本文將涵蓋涉及程式以及安裝環境的相關問題. Unicode 因為使用兩個byte存放不同文字的編碼,所以可以支持多語言, 即以unicode存放的文字可以顯示成為不同的語言種類,例如: 簡體中文, 繁體中文, 日文, 韓文,等等.每個語言中的字符在unicode中都有一定的編碼, 有一點需要注意, 我們就以簡體中文, 和繁體中文為例: 例如 ‘生’這個字, 在簡體中文, 繁體中文中都有, 但是因為簡體中文的”生”,和繁體中文的”生”,寫法一樣, 所以,在unicode 編碼中, “生”這個字的編碼只有一個, 如果寫法不一樣,在unicode 中就會有多個編碼. WindowsNT提供的unicode字元對應表,可以幫助你查看一個字體文件中不同字符得unicode 編碼, 如果你想知道一個字符得unicode, 你可以使用JDK中提供的一個工具 native2ascii.exe 去查看. 想讓我們的系統完全支持, 簡繁體混合得運行環境, 我們需要做到以下幾點:OS Setup此處的OS的類型風分兩種 Server 端,和Client 端Client 端支持的類型: Windows 98簡體,Windows 98繁體 (需要額外安裝中文字庫,以包含於我們的安裝程式中)Windows NT4.0簡體, Windows NT4.0繁體 (需要額外安裝中文字庫,以包含於我們的安裝程式中) Windows 2000簡體, Windows 2000繁體 (需要額外安裝中文字庫,以包含於我們的安裝程式中)Windows ME簡體.Windows ME繁體 (需要額外安裝中文字庫,以包含於我們的安裝程式中)Server 端支持的OS類型Windows NT4.0 Server簡繁體.Windows2000簡繁體.MSSQL server setup本文只提供SQL7得做法: SQL7中已經支持了unicode ,就是說如果你表的某個欄位,是使用nvarchar, nchar, or ntext etc, 那麼,存放在這個欄位中的字符將都是使用unicode 編碼.為了更好的支持 Unicode 得處理方式, SQL7 建議:在安裝過程中, 1: code page 選擇 cp936 (這樣可以兼容程序中insert, update sql沒帶 N的部分 如果code page 是cp950 或者 cp1252,則程式中不帶N的insert 和 update 會造成 存入db中的資料不是unicode.2: 如果你在安裝SQL7得過程中code page沒選擇cp936,而是使用了cp950或者cp1252, 那麼請確保你程式中的insert 和update的語句都有N,以保證這些程式插入資料庫的漢字是unicode.3: SQL其他部分的安裝請參考 NetBizSoft SQL Server setupDatabase Fields凡是需要存儲漢字的欄位,在MSSQL7中請一率使用使用 nxxxx類型,以支持unicode, Install和 init資料庫的腳本中插入漢字的地方一律加 NJDBC driver Setup我們使用i-net SPRINTAJDBC 2.0 Driver 這個Driver對unicode 支持的不錯, 在一般情況下,JDBC driver 經過設定都會對經過其傳送的字符進行編碼, By default character converting is disabled. for example: "jdbc:inetdae:localhost:1433?charset=Cp1250"jdbc:inetdae:localhost:1433?charset=sun.io.ByteToCharConverter.getDefault().getCharacterEncoding()jdbc:inetdae:localhost:1433?charset=" + System.getProperty("file.encoding");"jdbc:inetdae:localhost:1433?charset=" + (new java.io.InputStreamReader(in)).getEncoding();我們現在使用的Cp950就是繁體中文的編碼. i-net SPRINTAJDBC 2.0 Driver 是支持unicode只要我們將charset=cp950 換成 sql=7,這樣,經過JDBC得driver將自動傳遞unicode,Client Side SetupJava Application, 大家都知道java 是支持unicodede的, 但是在某種作業系統上, 例如繁體中文的作業系統顯示簡體中文的字符時, 即便需要顯示的中文字符是unicode編碼, Java Runtime 仍然需要一種包含這個字符unicode 編碼得 字體來正確顯示這個字符, 我們之所以在繁體中文上看不到有些簡體中文, 就是因為繁體中文使用的字體文件中沒有包含簡體字符得unicode 編碼, 但是也有一些簡體中文我們可以看見,那是為什麼?,前面已經提到了, 是因為這些可以正確顯示的簡體中文,和相應的繁體中文的寫法是一樣的, 也就是說繁體字體文件中已經包含了這些編碼.那麼如何在繁體的java runtime 中使用additional 的字體文件? 這個問題也就是我們解決簡繁體混合運行環境的關鍵, 我們有兩種方法在java runtime 中使用額外的字體文件:1: 更改font.properties 文件 在你安裝的JDK或者是JRE的目錄下, 有很多font.properties.*文件,那麼java runtime 會使用那個font.properties ?, 原來java runtime 是根據作業系統的設定, 按照以下的先後順序去使用font.properties 文件的: JavaHome/lib/font.properties.Language_Country_Encoding.OSVersion JavaHome/lib/font.properties.Language_Country_Encoding.OS JavaHome/lib/font.properties.Language_Country_Encoding.Version JavaHome/lib/font.properties.Language_Country_Encoding JavaHome/lib/font.properties.Language_Country.OSVersion JavaHome/lib/font.properties.Language_Country.OS JavaHome/lib/font.properties.Language_Country.Version JavaHome/lib/font.properties.Language_Country JavaHome/lib/font.properties.Language_Encoding.OSVersion JavaHome/lib/font.properties.Language_Encoding.OS JavaHome/lib/font.properties.Language_Encoding.Version JavaHome/lib/font.properties.Language_Encoding JavaHome/lib/font.properties.Language.OSVersion JavaHome/lib/font.properties.Language.OS JavaHome/lib/font.properties.Language.Version JavaHome/lib/font.properties.Language JavaHome/lib/font.properties.Encoding.OSVersion JavaHome/lib/font.properties.Encoding.OS JavaHome/lib/font.properties.Encoding.Version JavaHome/lib/font.properties.Encoding JavaHome/lib/font.properties.OSVersion JavaHome/lib/font.properties.OS JavaHome/lib/font.properties.Version JavaHome/lib/font.properties那麼 font.properties 到底包含什麼內容:以下是個簡單的介紹,以font.properties.zh_TW為example詳細內容見專門的文檔# @(#)font.properties.zh_TW 1.16 00/10/06# AWT Font default Properties for Traditional Chinese Windows 在java中使用的字體是虛擬的字體,包括dialog, serif等,這些字體是通過font.properties文件和作業系統中的具體字體對應起來的, dialog.plain.0=Arial,ANSI_CHARSETdialog.plain.1=\u7d30\u660e\u9ad4,CHINESEBIG5_CHARSET,NEED_CONVERTEDdialog.plain.2=WingDings,SYMBOL_CHARSET,NEED_CONVERTEDdialog.plain.3=Symbol,SYMBOL_CHARSET,NEED_CONVERTED0,1,2,3,表示了對應的搜順序, 就是如果在第一個font 文件中找不到相關的unicode 就到下一個對應的文件中去找,以次類推sansserif.bold.0=Arial Bold,ANSI_CHARSET…# font filenames for reduced initialization time#在這裡指定前面我們在把虛擬的字體對應到實際字體時, 使用的字體名稱對應的字體文件filename.\u7d30\u660e\u9ad4=MINGLIU.TTCfilename.\u65b0\u7d30\u660e\u9ad4=MINGLIU.TTCfilename.Arial=ARIAL.TTF# Default font definition#這裡說明的是如果沒有找到相關的unicode 那麼該顯示什麼字符號,2751是一個方框default.char=2751 大概知道了font.properties文件的內容, 我們就可以增加一種字體到運行環境中了,只要這種字體文件,包含了程式中使用得unicode 編碼所對應的文字,那麼我們的程式就可以正確顯示不同編碼的漢字了,現在我們採用的是Microsoft比較齊全的亞洲字體文件2: 在程序中指定需要使用的字體文件從指定的位置讀取相關的字體文件, 使用Jdk1.3提供的Font.createFont方法動態構造一個Font File f = new File("y:\\temp\\Simsun.TTC"); //SimSun.TTC是一種比較齊全的unicode文件 FileInputStream fis = new FileInputStream(f); Font z = Font.createFont(Font.TRUETYPE_FONT,fis); Font f1 = z.deriveFont(Font.PLAIN,20f); fis.close();把這個Font 指定給相關的component ,TextField, TextArea, 僅僅這樣JavaRuntime仍然不可以正確顯示, 你還需要指定作業系統的國家的設定為English(US/Canada/…), 或者只在jre/lib目錄下只保留font.properties 文件. 请教个逻辑性的问题。天,和 周的 百分比 求条SQL 如何添加列 SQL2005中的事务与锁定(五) 如何设置sql 每天定时备份 生成一新的备份文件呀 安装sql server 2005 遇到的问题,要崩溃了! 我想知道,在一个表被INSERT UPDATE DELETE的时候,还有那些表也一起更新了呢? 兄弟今天高兴,放分庆贺一下!希望各位大侠多多栽培! 數據傳輸很慢,,求大家幫助! 请问编译oci程序,需要加什么库? 如何查看使用当前数据库的用户连接数? 小问题,如何按照已有的表结构建立一张新的表?
About Unicode1. Guide line
2. OS Setup
3. MSSQL server setup
4. Database Fields
5. JDBC driver Setup
6. Client Side Setup
7. Report Coding
8. OthersGuide Line:
目的: 使我們的程式可以正常工作於簡繁體混合的運行環境中.本文將涵蓋涉及程式以及安裝環境的相關問題. Unicode 因為使用兩個byte存放不同文字的編碼,所以可以支持多語言, 即以unicode存放的文字可以顯示成為不同的語言種類,例如: 簡體中文, 繁體中文, 日文, 韓文,等等.
每個語言中的字符在unicode中都有一定的編碼, 有一點需要注意, 我們就以簡體中文, 和繁體中文為例: 例如 ‘生’這個字, 在簡體中文, 繁體中文中都有, 但是因為簡體中文的”生”,和繁體中文的”生”,寫法一樣, 所以,在unicode 編碼中, “生”這個字的編碼只有一個, 如果寫法不一樣,在unicode 中就會有多個編碼. WindowsNT提供的unicode字元對應表,可以幫助你查看一個字體文件中不同字符得unicode 編碼, 如果你想知道一個字符得unicode, 你可以使用JDK中提供的一個工具 native2ascii.exe 去查看. 想讓我們的系統完全支持, 簡繁體混合得運行環境, 我們需要做到以下幾點:OS Setup
此處的OS的類型風分兩種 Server 端,和Client 端Client 端支持的類型:
Windows 98簡體,
Windows 98繁體 (需要額外安裝中文字庫,以包含於我們的安裝程式中)Windows NT4.0簡體,
Windows NT4.0繁體 (需要額外安裝中文字庫,以包含於我們的安裝程式中)
Windows 2000簡體,
Windows 2000繁體 (需要額外安裝中文字庫,以包含於我們的安裝程式中)Windows ME簡體.
Windows ME繁體 (需要額外安裝中文字庫,以包含於我們的安裝程式中)Server 端支持的OS類型
Windows NT4.0 Server簡繁體.
Windows2000簡繁體.MSSQL server setup本文只提供SQL7得做法: SQL7中已經支持了unicode ,就是說如果你表的某個欄位,是使用nvarchar, nchar, or ntext etc, 那麼,存放在這個欄位中的字符將都是使用unicode 編碼.為了更好的支持 Unicode 得處理方式, SQL7 建議:在安裝過程中, 1: code page 選擇 cp936 (這樣可以兼容程序中insert, update sql沒帶 N的部分 如果code page 是cp950 或者 cp1252,則程式中不帶N的insert 和 update 會造成 存入db中的資料不是unicode.2: 如果你在安裝SQL7得過程中code page沒選擇cp936,而是使用了cp950或者cp1252, 那麼請確保你程式中的insert 和update的語句都有N,以保證這些程式插入資料庫的漢字是unicode.3: SQL其他部分的安裝請參考 NetBizSoft SQL Server setupDatabase Fields
凡是需要存儲漢字的欄位,在MSSQL7中請一率使用使用 nxxxx類型,以支持unicode, Install和 init資料庫的腳本中插入漢字的地方一律加 N
JDBC driver Setup我們使用i-net SPRINTAJDBC 2.0 Driver 這個Driver對unicode 支持的不錯, 在一般情況下,JDBC driver 經過設定都會對經過其傳送的字符進行編碼,
By default character converting is disabled.
for example: "jdbc:inetdae:localhost:1433?charset=Cp1250"
jdbc:inetdae:localhost:1433?charset=sun.io.ByteToCharConverter.getDefault().getCharacterEncoding()
jdbc:inetdae:localhost:1433?charset=" + System.getProperty("file.encoding");
"jdbc:inetdae:localhost:1433?charset=" + (new java.io.InputStreamReader(in)).getEncoding();
我們現在使用的Cp950就是繁體中文的編碼. i-net SPRINTAJDBC 2.0 Driver 是支持unicode
只要我們將charset=cp950 換成 sql=7,這樣,經過JDBC得driver將自動傳遞unicode,
Client Side SetupJava Application, 大家都知道java 是支持unicodede的, 但是在某種作業系統上, 例如繁體中文的作業系統顯示簡體中文的字符時, 即便需要顯示的中文字符是unicode編碼, Java Runtime 仍然需要一種包含這個字符unicode 編碼得 字體來正確顯示這個字符, 我們之所以在繁體中文上看不到有些簡體中文, 就是因為繁體中文使用的字體文件中沒有包含簡體字符得unicode 編碼, 但是也有一些簡體中文我們可以看見,那是為什麼?,前面已經提到了, 是因為這些可以正確顯示的簡體中文,和相應的繁體中文的寫法是一樣的, 也就是說繁體字體文件中已經包含了這些編碼.那麼如何在繁體的java runtime 中使用additional 的字體文件? 這個問題也就是我們解決簡繁體混合運行環境的關鍵, 我們有兩種方法在java runtime 中使用額外的字體文件:1: 更改font.properties 文件 在你安裝的JDK或者是JRE的目錄下, 有很多font.properties.*文件,那麼java runtime 會使用那個font.properties ?, 原來java runtime 是根據作業系統的設定, 按照以下的先後順序去使用
font.properties 文件的: JavaHome/lib/font.properties.Language_Country_Encoding.OSVersion
JavaHome/lib/font.properties.Language_Country_Encoding.OS
JavaHome/lib/font.properties.Language_Country_Encoding.Version
JavaHome/lib/font.properties.Language_Country_Encoding
JavaHome/lib/font.properties.Language_Country.OSVersion
JavaHome/lib/font.properties.Language_Country.OS
JavaHome/lib/font.properties.Language_Country.Version
JavaHome/lib/font.properties.Language_Country
JavaHome/lib/font.properties.Language_Encoding.OSVersion
JavaHome/lib/font.properties.Language_Encoding.OS
JavaHome/lib/font.properties.Language_Encoding.Version
JavaHome/lib/font.properties.Language_Encoding
JavaHome/lib/font.properties.Language.OSVersion
JavaHome/lib/font.properties.Language.OS
JavaHome/lib/font.properties.Language.Version
JavaHome/lib/font.properties.Language
JavaHome/lib/font.properties.Encoding.OSVersion
JavaHome/lib/font.properties.Encoding.OS
JavaHome/lib/font.properties.Encoding.Version
JavaHome/lib/font.properties.Encoding
JavaHome/lib/font.properties.OSVersion
JavaHome/lib/font.properties.OS
JavaHome/lib/font.properties.Version
JavaHome/lib/font.properties那麼 font.properties 到底包含什麼內容:以下是個簡單的介紹,以font.properties.zh_TW為example
詳細內容見專門的文檔# @(#)font.properties.zh_TW 1.16 00/10/06
# AWT Font default Properties for Traditional Chinese Windows
在java中使用的字體是虛擬的字體,包括dialog, serif等,這些字體是通過font.properties文件和作業系統中的具體字體對應起來的,
dialog.plain.0=Arial,ANSI_CHARSET
dialog.plain.1=\u7d30\u660e\u9ad4,CHINESEBIG5_CHARSET,NEED_CONVERTED
dialog.plain.2=WingDings,SYMBOL_CHARSET,NEED_CONVERTED
dialog.plain.3=Symbol,SYMBOL_CHARSET,NEED_CONVERTED
0,1,2,3,表示了對應的搜順序, 就是如果在第一個font 文件中找不到相關的unicode 就到下一個對應的文件中去找,以次類推sansserif.bold.0=Arial Bold,ANSI_CHARSET
…# font filenames for reduced initialization time
#在這裡指定前面我們在把虛擬的字體對應到實際字體時, 使用的字體名稱對應的字體文件
filename.\u7d30\u660e\u9ad4=MINGLIU.TTC
filename.\u65b0\u7d30\u660e\u9ad4=MINGLIU.TTC
filename.Arial=ARIAL.TTF# Default font definition
#這裡說明的是如果沒有找到相關的unicode 那麼該顯示什麼字符號,2751是一個方框
default.char=2751 大概知道了font.properties文件的內容, 我們就可以增加一種字體到運行環境中了,只要這種字體文件,包含了程式中使用得unicode 編碼所對應的文字,那麼我們的程式就可以正確顯示不同編碼的漢字了,現在我們採用的是Microsoft比較齊全的亞洲字體文件2: 在程序中指定需要使用的字體文件
從指定的位置讀取相關的字體文件, 使用Jdk1.3提供的Font.createFont方法動態構造一個Font File f = new File("y:\\temp\\Simsun.TTC"); //SimSun.TTC是一種比較齊全的unicode文件
FileInputStream fis = new FileInputStream(f);
Font z = Font.createFont(Font.TRUETYPE_FONT,fis);
Font f1 = z.deriveFont(Font.PLAIN,20f);
fis.close();把這個Font 指定給相關的component ,TextField, TextArea, 僅僅這樣JavaRuntime仍然不可以正確顯示, 你還需要指定作業系統的國家的設定為English(US/Canada/…), 或者只在jre/lib目錄下只保留font.properties 文件.