導航:首頁 > 編程語言 > javautf8轉gb2312

javautf8轉gb2312

發布時間:2023-04-07 23:28:09

Ⅰ 使用java寫一個utf8 到 gb2312的編碼轉換函數

String newStr = new String(oldStr.getBytes("utf8"), "gb2312");
不過,你是不是要自己寫一個方法實現編碼轉換啊?

還果真是被我猜中了?你是要自己實現嗎?要是真這樣的話我就去幫你看看,要是不是呢,你就以後自己琢磨琢磨,:-D

你要想實現並不難,其實就是參考Java的源碼,哎,這就是開源的好處啊~~
其實我想說的是,設計Java的人固然是牛,但他又不是個神人,他能實現的我們肯定也能,只是也許我們設計出來的沒有他那麼全面,沒他考慮的那麼透徹。
也許我們現在要參考源碼之類的,但是等咱們吧底層的都給抓牢了,以後什麼問題解決不了!
就像以前老師讓咱做文件上傳下載,老師說這簡單,我們全笑了,因為俺們覺得難~~你猜我們那老師怎麼說,笑什麼呢,是很簡單啊,不就一讀寫文件操作嘛,你們都學到這份上了,看到問題還覺得會有很大問題嗎?
唉,俺們老師不知道啊,俺們看到什麼都是覺得難啊,主要是俺們沒底啊~~
呵呵,遠了遠了,見笑啦~~

Ⅱ Java怎麼將字元串轉換為GB2312原編碼

@Test
publicvoidtest333(){
Stringa="青白";
try{
byte[]b=a.getBytes("GB2312");
System.out.println(bytesToHexFun1(b));

}catch(UnsupportedEncodingExceptione){
e.printStackTrace();
}
}
//將byte數組轉成16進制字元串
(byte[]bytes){
char[]HEX_CHAR={'0','1','2','3','4','5',
'6','7','8','9','a','b','c','d','e','f'};
//一個byte為8位,可用兩個十六進制位標識
char[]buf=newchar[bytes.length*2];
inta=0;
intindex=0;
for(byteb:bytes){//使用除與取余進行轉換
if(b<0){
a=256+b;
}else{
a=b;
}
buf[index++]=HEX_CHAR[a/16];
buf[index++]=HEX_CHAR[a%16];
}
returnnewString(buf);
}

中心思想就是先轉成GB2312的byte數組,再轉成16進制就可以了。

Ⅲ 應該如何徹底解決UTF8編碼轉換成GB2312編碼問題

分類: 電腦/網路 >> 程序設計 >> 其他編程語言
問題描述:

我需要將從人家網站傳來的的UTF8編碼攜帆的字元轉換成GB2312,用函數轉換確實可行,但這個UTF8轉GB2312編碼的函數,運行起來感覺非常消耗資源,有時甚至會造成死機。

在不修改伺服器設置的前提下,我應該如何解決這個問題呢?有沒辯氏雹有拋核巧棄函數的轉換辦法,或者誰能提供一個更高效的函數?

請有過這方面的高手指點,非常感謝。

UTF8轉GB2312的原函數如下(好像網上的都是這個函數):

<%

function UTF2GB(UTFStr)

for Dig=1 to len(UTFStr)

if mid(UTFStr,Dig,1)="%" then

if len(UTFStr) >= Dig+8 then

GBStr=GBStr & ConvChinese(mid(UTFStr,Dig,9))

Dig=Dig+8

else

GBStr=GBStr & mid(UTFStr,Dig,1)

end if

else

GBStr=GBStr & mid(UTFStr,Dig,1)

end if

next

UTF2GB=GBStr

end function

function ConvChinese(x)

A=split(mid(x,2),"%")

i=0

j=0

for i=0 to ubound(A)

A(i)=c16to2(A(i))

next

for i=0 to ubound(A)-1

DigS=instr(A(i),"0")

Unicode=""

for j=1 to DigS-1

if j=1 then

A(i)=right(A(i),len(A(i))-DigS)

Unicode=Unicode & A(i)

else

i=i+1

A(i)=right(A(i),len(A(i))-2)

Unicode=Unicode & A(i)

end if

next

if len(c2to16(Unicode))=4 then

ConvChinese=ConvChinese & chrw(int("&H" & c2to16(Unicode)))

else

ConvChinese=ConvChinese & chr(int("&H" & c2to16(Unicode)))

end if

next

end function

function c2to16(x)

i=1

for i=1 to len(x) step 4

c2to16=c2to16 & hex(c2to10(mid(x,i,4)))

next

end function

function c2to10(x)

c2to10=0

if x="0" then exit function

i=0

for i= 0 to len(x) -1

if mid(x,len(x)-i,1)="1" then c2to10=c2to10+2^(i)

next

end function

function c16to2(x)

i=0

for i=1 to len(trim(x))

tempstr= c10to2(cint(int("&h" & mid(x,i,1))))

do while len(tempstr)<4

tempstr="0" & tempstr

loop

c16to2=c16to2 & tempstr

next

end function

function c10to2(x)

mysign=sgn(x)

x=abs(x)

DigS=1

do

if x<2^DigS then

exit do

else

DigS=DigS+1

end if

loop

tempnum=x

i=0

for i=DigS to 1 step-1

if tempnum>=2^(i-1) then

tempnum=tempnum-2^(i-1)

c10to2=c10to2 & "1"

else

c10to2=c10to2 & "0"

end if

next

if mysign=-1 then c10to2="-" & c10to2

end function

%>

解析:

你要實現轉換, 我給你寫點我的經驗吧. <% public String convert(String str) { String result=""; try { result=new String(str.getBytes("UTF-8"),"gb2312"); } catch (Exception ex) { System.out.println(ex.getMessage()); } return result; }%>然後在下面就可以String names=this.convert((String) ses.getAttribute("name"));進行轉換了;我一般都是這樣轉換的.你也可以改一下.用Static方法. 搞到另一個類裡面,方便調用;

Ⅳ UTF-8和GB2312互轉的最簡單快捷的方法

下面介紹一種UTF-8和GB2312互轉的最簡單快捷的方法:

一、如果你想把utf-8轉為GB2312
1、用記事本打開源碼,芹帶把<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />換成<meta http-equiv=Content-Type content="text/html;charset=gb2312">;如閉旦果是JS不需要加這句,如果是網頁最好加上這句和你頁面對應的編碼。

2、用記事本打開源碼,另存為,編碼 哪裡選擇 ANSI 即可。

二、如果你想把GB2312轉為utf-8
1、用記事本打開源碼,把<meta http-equiv=Content-Type content="text/html;charset=gb2312">換成<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />;如果是JS不需要加這句,如果是網頁最好加上這句和你頁面對應的編碼。

2、用記事本打開源碼,另存為,編碼 哪裡轎首擾選擇 UTF-8 即可。

特別提醒:CSS的編碼最好和網頁的編碼一致,因為有一個古老的瀏覽器叫IE6,他的市場佔用率依然非常高,編碼不一致的CSS在IE6下不起作用。

Ⅳ java中怎樣將utf-8轉成GB2312編碼

Stringsource="測試字元串";
Stringresult=null;
try{
result=newString(source.getBytes("utf-8"),"gb2312");
}catch(){
result=source;
}
System.err.println(result);

Ⅵ 在java中,如何將utf8 十六進制編碼轉換成漢字

當在基於HTTP協議的JSP或Servlet的應用中獲取數據或發送請求時,JVM會把輸送的數據編碼成UTF8格式。如果我們直接從HTTP流中提取中文數據,提取的結果為「????」(可能更多問號),為轉換成我們能夠理解的中文字元,我們需要把UTF8轉換成GB2312,藉助ISO-8859-1標准編碼能夠輕易的實現,下面的代碼實現了這一功能:

byte [] b;
String utf8_value;
utf8_value = request.getParameter("NAME");//從HTTP流中取"NAME"的UTF8數據
b = utf8_value.getBytes("8859_1"); //中間用ISO-8859-1過渡
String name = new String(b, "GB2312"); //轉換成GB2312字元

在知道流長度的情況下將輸入流轉換成位元組數組 Java中的輸入流抽象類InputStream有int read(byte[] b, int off, int len)方法,參數中byte[] b是用來存放從InputStream中讀取的數據,int off指定數組b的偏移地址,也就是數組b的起始下標,int len指定需要讀取的長度,方法返回實際讀取的位元組數。
下面的代碼實現了這一功能:

ServletInputStream inStream = request.getInputStream(); //取HTTP請求流
int size = request.getContentLength(); //取HTTP請求流長度
byte[] buffer = new byte[size]; //用於緩存每次讀取的數據
byte[] in_b = new byte[size]; //用於存放結果的數組
int count = 0;
int rbyte = 0;
while (count < size) {
//循環讀取
rbyte = inStream.read(buffer); //每次實際讀取長度存於rbyte中
for(int i=0;i<rbyte;i++) {
in_b[count + i] = buffer[i];
}
count += rbyte;
}

在不知道流長度的情況下將輸入流轉換成位元組數組 前面介紹了已知流長度的情況下的轉換方法,那麼當我們不知道流有多長時,也就是說不能確定轉換後的位元組數組有多大時,該怎麼處理呢?筆者查看了JDK文檔之後發現ByteArrayOutputStream有一個byte[] toByteArray()方法,該方法會自動創建一個位元組數組,然後返回。於是就巧妙的用ByteArrayOutputStream來作中間過渡實現轉換,其它處理跟上面所介紹已知長度的情況差不多。假設需要被轉換的流已經放在inStream里了,我們可以用如下的代碼實現這一功能:

ByteArrayOutputStream swapStream = new ByteArrayOutputStream();
byte[] buff = new byte[100]; //buff用於存放循環讀取的臨時數據
int rc = 0;

while ((rc = inStream.read(buff, 0, 100)) > 0) {
swapStream.write(buff, 0, rc);
}
byte[] in_b = swapStream.toByteArray(); //in_b為轉換之後的結果
你試著改寫成自己需要的代碼

Ⅶ java utf 8轉gbk

utf8和gb2312本來就是兩個不同的字元集,對於中文來說,它們的編碼並不會相同。如果剛開始的字元是utf8的,那麼轉換為gb2312後自然會是亂碼;如果初始時是gb2312的中文,而後經utf8中間編碼後又從utf8轉為gb2312後不會是亂碼的。

我想是這樣的!

這有往篇文章,是關於java字元編碼相關的,講的很詳細,有代碼示例,你可以去看一下:http://vinter.javaeye.com/blog/670502

閱讀全文

與javautf8轉gb2312相關的資料

熱點內容
linuxsftp連接 瀏覽:934
光伏日發電量演算法 瀏覽:125
小肚皮app怎麼才有vip 瀏覽:616
php全形轉換半形 瀏覽:927
java字元序列 瀏覽:539
杭州編譯分布式存儲區塊鏈 瀏覽:575
材料壓縮曲線 瀏覽:247
linux命令排序 瀏覽:151
手機熱點加密為啥連接不上電腦 瀏覽:979
編譯器合並計算 瀏覽:959
android音頻曲線 瀏覽:343
linuxftp自動登錄 瀏覽:802
運行編譯後網頁 瀏覽:70
閱讀app怎麼使用 瀏覽:319
centos防火牆命令 瀏覽:432
命令行變更 瀏覽:332
linux設備和驅動 瀏覽:207
加密貨幣騙局破案 瀏覽:345
cc特徵碼加密 瀏覽:775
清空dns緩存命令 瀏覽:295