使用 Java 將中文字元轉換成 Unicode 編碼
這兩天操作XML使用到了Jdom,在建立XML檔案並輸出到硬碟的時候遇到一箇中文編碼的問題:Jdom預設輸出的XML編碼是UTF-8,但是文件中如果出現中文字元那麼該中文字元就會變成亂碼,造成XML檔案無法被正確解析。
UTF -8應該是可以用來表示中文的吧?我不知道這是不是Jdom的一個BUG(Jdom 1.0,beta了10次的產物哦!)。我google了一下,大家解決這個問題的辦法無非是把Jdom的輸出字符集改為GBK或者GB2312,但是這樣就會有一些副作用,如果在沒有特定字符集(GBK或者GB2312)的作業系統上不是依然不能正確解析嗎?一個比較好的解決辦法是先把中文轉換成 Unicode編碼在直接輸出,程式解析XML後的時候再把Unicode編碼轉回中文就沒有問題了。
於是我查看了JDK的文件, 截至Java 5好像都沒有做類似轉換的類可以直接使用,但是我發現一個類 java.util.Properties,它的原始碼裡有兩個私有(private)方法 loadConvert (char[] in, int off, int len, char[] convtBuf) 和 saveConvert(String theString, boolean escapeSpace) 其實就是做特殊字元和Unicode編碼字元間轉換的,我把它們提取出來,單獨包裝到一個類裡就可以使用了。
下面是我包裝的類 CharacterSetToolkit.java,若你在專案中使用請不要改變package及author等作者資訊。
* CharacterSetToolkit.java
*
* Created on 2007年5月17日, 上午11:04
*
* To change this template, choose Tools | Template Manager
* and open the template in the editor.
*/
package mobi.chenwei.wing.util;
/**
* 進行字元操作的工具類。
* @author Chen Wei
* @website www.chenwei.mobi
* @email [email protected]
*/
public
/** Creates a new instance of CharacterSetToolkit */
public CharacterSetToolkit() {
}
privatestaticfinalchar[] hexDigit ={
'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'
};
privatestaticchar toHex(int nibble) {
return hexDigit[(nibble &0xF)];
}
/**
* 將字串編碼成 Unicode 。
* @param theString 待轉換成Unicode編碼的字串。
* @param escapeSpace 是否忽略空格。
* @return 返回轉換後Unicode編碼的字串。
*/
publicstatic String toUnicode(String theString, boolean escapeSpace) {
int len = theString.length();
int bufLen = len *2;
if (bufLen <0) {
bufLen = Integer.MAX_VALUE;
}
StringBuffer outBuffer =new StringBuffer(bufLen);
for(int x=0; x<len; x++) {
char aChar = theString.charAt(x);
// Handle common case first, selecting largest block that
// avoids the specials below
if ((aChar >61) && (aChar <127)) {
if (aChar =='/') {
outBuffer.append('/'); outBuffer.append('/');
continue;
}
outBuffer.append(aChar);
continue;
}
switch(aChar) {
case'':
if (x ==0|| escapeSpace)
outBuffer.append('/');
outBuffer.append('');
break;
case'':outBuffer.append('/'); outBuffer.append('t');
break;
case'':outBuffer.append('/'); outBuffer.append('n');
break;
case'':outBuffer.append('/'); outBuffer.append('r');
break;
case'':outBuffer.append('/'); outBuffer.append('f');
break;
case'=': // Fall through
case':': // Fall through
case'#': // Fall through
case'!':
outBuffer.append('/'); outBuffer.append(aChar);
break;
default:
if ((aChar <0x0020) || (aChar >0x007e)) {
outBuffer.append('/');
outBuffer.append('u');
outBuffer.append(toHex((aChar >>12) &0xF));
outBuffer.append(toHex((aChar >>8) &0xF));
outBuffer.append(toHex((aChar >>4) &0xF));
outBuffer.append(toHex( aChar &0xF));
}else{
outBuffer.append(aChar);
}
}
}
return outBuffer.toString();
}
/**
* 從 Unicode 碼轉換成編碼前的特殊字串。
* @param in Unicode編碼的字元陣列。
* @param off 轉換的起始偏移量。
* @param len 轉換的字元長度。
* @param convtBuf 轉換的快取字元陣列。
* @return 完成轉換,返回編碼前的特殊字串。
*/
public String fromUnicode(char[] in, int off, int len, char[] convtBuf) {
if (convtBuf.length < len) {
int newLen = len *2;
if (newLen <0) {
newLen = Integer.MAX_VALUE;
}
convtBuf =newchar[newLen];
}
char aChar;
char[] out = convtBuf;
int outLen =0;
int end = off + len;
while (off < end) {
aChar = in[off++];
if (aChar =='/') {
aChar = in[off++];
if (aChar =='u') {
// Read the xxxx
int value =0;
for (int i =0; i <4; i++) {
aChar = in[off++];
switch (aChar) {
case'0':
case'1':
case'2':
case'3':
case'4':
case'5':
case'6':
case'7':
case'8':
case'9':
value = (value <<4) + aChar -'0';
break;
case'a':
case'b':
case'c':
case'd':
case'e':
case'f':
value = (value <<4) +10+ aChar -'a';
break;
相關推薦
使用 Java 將中文字元轉換成 Unicode 編碼
這兩天操作XML使用到了Jdom,在建立XML檔案並輸出到硬碟的時候遇到一箇中文編碼的問題:Jdom預設輸出的XML編碼是UTF-8,但是文件中如果出現中文字元那麼該中文字元就會變成亂碼,造成XML檔案無法被正確解析。 UTF -8應該是可以用來表示中文的吧?我不知道這是不
中文轉換成Unicode編碼和Unicode編碼轉換成中文,Java程式碼實現
import java.util.Properties; public class Test { public static void main(String[] args
控制檯程式的中文輸出亂碼問題(export LC_CTYPE=zh_CN.GBK,或者修改/etc/sysconfig/i18n為zh_CN.GBK。使用setlocale(LC_CTYPE, "");會使用預設辦法。編譯器會將原始碼做轉換成Unicode格式,或者指定gcc的輸
今天發現用securecrt登陸時,gcc編譯出錯時會出現亂碼,但直接在主機的視窗介面下用Shell編譯卻沒有亂碼。查看了一下當時的錯誤描述,發現它的引號是中文引號,導致在SecureCRT中顯示出錯: before numeric constant 在網上查了一下,可以
java將資料庫資料轉換成word文件並且生成pdf檔案最後轉換成對應的圖片
目的:將資料轉換成word圖片的方式展現給使用者 工具:openoffice +java程式碼 +資料庫,其中openoffice有windows版本的和Linux版本的。 其中openoffice的下載地址為:連結:https://pan.baidu.com/s/1Y5Ra3TfNCc
Java將時間戳轉換成指定格式日期
public String TimeStamp2Date(String timestampString, String formats){ Long timestamp = Long.parseLong(timestampString)*1000; S
將中文漢字轉換成拼音(全拼)
using System.Globalization; using System.Text; using System.Text.RegularExpressions; /// <summary> /// 漢字轉拼音類 /// </summary
Java將小寫金額轉換成大寫
public class Test { private static final String UNIT = "萬千佰拾億千佰拾萬千佰拾元角分"; private static final St
java將金額數字轉換成對應的漢字
記得這是一道面試題,今天中午花時間寫了下,貼程式碼: import java.util.Scanner; public class NumberToWord { private
Java 將小寫金額轉換成大寫金額
將小寫金額轉換成大寫金額 例如:110.00轉換後為 壹佰壹拾圓整 程式碼如下 /** * 將小寫金額轉換為大寫 * * @param amount * 110.00 * @retu
如何用JAVA將二進位制檔案轉換成BASE64格式儲存到MySQL的Blob欄位裡並讀出下載
由於需求要將上傳的檔案以BASE64的方式儲存到MySQL的Blob欄位,並可以讀取Blob欄位下載生成檔案,方法如下: 1、下載用於BASE64編碼轉換的sun.misc.BASE64Decoder
JS將unicode碼轉中文方法(解決IE8對JSON.stringify中文轉換成unicode的問題)
第①種情況:(無特殊字元) // 把json物件轉為json串 var stringcontent = JSON.stringify(data.jsonObject); //此時變數為:stringcontent={policy":[{"name":"must_inst
隨便發發,java gb2312與中文字元轉換,以及中文和Unicode的轉換
/** * 中文轉Unicode * @param gbString * @return */ public static String UnicodeEncoding(String gbString) { //gbStri
Java將漢字轉換成URL編碼
String abcd = "中文";//或者使用abcd = "\u0061\u4E2D\u6587"; System.out.println(java.net.URLEncoder
【轉載】如何用VB6在中文系統下把Unicode編碼的日文字元轉成Shift-JIS編碼
這個題目有點變態,不過有時確實會有這種需求,起碼我就碰到過。同樣變態的需求還有“如何用VB6在日文系統下把Unicode編碼的中文字元轉成GB2312編碼”。這種需求有個比較時髦的名字,叫做“國際對應”。本文將提供幾種解決方法。一:繁瑣的方法如果之前看過我貼的那篇VB6中EBCDIC碼和Unicode碼之間的
Java將中文轉換成拼音,用於字母的模糊查詢
/** * 將漢字轉換為拼音 * @author Champion.Wong * */ public class Trans2PinYin { private static int[] pyvalue =
oracle改進之將阿拉伯數字轉換成中文數字
replace 工作 漢字 spa bsp func ace 延展 char 本博客是自己在學習和工作途中的積累與總結。 將阿拉伯數字轉換成中文漢字,方法自定義函數 create or replace function formate(val in num
將阿拉伯數字轉換成中文的php函數
ont enum pre == tin 函數 array light blog function toChinaseNum($num){ $char = array("零","一","二","三","四","五","六","七","八","九"); $dw
Java對網路圖片/本地圖片轉換成Base64編碼和解碼
一、將本地圖片轉換成Base64編碼字串 /** * 將本地圖片轉換成Base64編碼字串 * * @param imgFile 圖片目錄路徑 * @return */ public static String getImgFi
[Java] Jar2Exe,jar2工具將jar包轉換成exe可執行檔案的詳細過程
[Java] Jar2Exe,jar2工具將jar包轉換成exe可執行檔案的詳細過程 軟體下載地址 連結: https://pan.baidu.com/s/1Ei39JYGpb7wyS9UkMl1GTQ 提取碼: yvkv 一、首先將程式匯出為jar包 1、在MyEcli
將浮點數轉換成人命幣讀法字串 java版
題目:編寫一個程式,將浮點數轉換成人命幣讀法字串,例如,將1006.333轉換成壹仟零陸元叄角叄分 下面是我的解決方案,雖然沒有大神的那麼優秀,但是功能上還是差不多的。測試資料是從別人程式碼那裡賦值過來的。可能 註釋 中存在錯誤。 package t