java字元亂碼
Ⅰ java如何判斷一個字元串是否為亂碼
1.在計算機中賣肆頃是沒有字元雹鏈的,所有的字元都需要編碼後存入計算機中,當然拿出來的時候也需要解碼,所以如果你兩個過程用的編碼方式不同中陸,就出現了亂碼。
2.嚴格來講java只能判斷簡單的亂碼 例如:用正則表達式判斷一行字元串是否有字母,數字,等等吧 但是不準確。亂碼一般情況下是沒有字母或者數字的。但是java沒法准確的判斷字元串是否為亂碼。解決辦法就是自己定義一種編碼(比如utf-8),只要不是此編碼的都認定為亂碼。
Ⅱ 用java讀取txt檔案中的中文寫入資料庫出現中文亂碼,怎麼解決
用java讀取txt檔案中的中文寫入資料庫出現中文亂碼,怎麼解決?
1,設定下你資料庫的編碼,一般設定悉祥簡成UTF-8或者GBK或者GB2312
2,java讀取TXT資料時可以轉換下編碼,再存進資料庫,從資料庫讀取出來後顯示時也同樣的轉換下編碼,好像可以用個過濾器來弄的,
MFC向Mysql資料庫寫入資料,中文亂碼怎麼解決
① 首先把MySQL的服務停掉 在執行視窗輸入: s mysql
② 把伺服器和客戶端的字元集改成自己想用的字元集:GB2312或是utf8等……
具體操作為:開啟mysql安裝目錄下的myini.tet;
找到default-character-set,將其改為自己想用的字元集:GB2312或是utf8等……,要注意的是這里有兩個default-character-set,用ctrl+f定位在檔案最前面輸入default就會找到,都要改過來;
③ 重啟MySQL伺服器,在執行視窗輸入: start mysql
④ 最重要的是一點是,到這里我們已經能夠解決亂碼問題了,可問題是我們依然還會出現亂碼問題,這是因為我們現在的表被建立的時候用的是預設的字元集(latin1),所以這時候我們要把表刪除,然後重建就可以了!
java資料庫中文亂碼怎麼解決
可能原因一:資料庫不支援中文,或者是資料庫編碼格式和java程式碼編碼格式不睜褲一致,這種情況需要修改資料庫編碼格式:
ALTER SYSTEM DISABLE RESTRICTED SESSION;改完編碼後執行
sql> conn / as sysdba;
sql> shutdown immediate;
database closed.
database di *** ounted.
oracle instance shut down.
sql> startup mount;
oracle instance started.
total system global area 135337420 bytes
fixed size 452044 bytes
variable size 109051904 bytes
database buffers 25165824 bytes
redo buffers 667648 bytes
database mounted.
sql> alter system enable restricted session;
system altered.
sql> alter system set job_queue_processes=0;
system altered.
sql> alter system set aq_tm_processes=0;
system altered.
sql> alter database open;
database altered.
sql> alter database character set internal_use UTF-8;
sql> shutdown immediate;
sql> startup;
可能原因二:java程式碼生成插入語句的時候,已經發生亂碼現象,這種只能是修改專案編碼格式或者是在資料獲取的時候直接轉譯程式碼編碼格式來實現了。
php讀取txt檔案寫入資料庫
等於茫然無知地站在那裡。
那些紀念碑樹立在亞莫迪凱和內格巴
雖受天鵝神翅拍體撞,
給我一隻蘆笛,歌唱吧
第二天
你早就被風吹縐了的謊言哈哈
android中讀取檔案中文亂碼怎麼解決
修改APP的編碼就可以了
右鍵-->Properties-->Resource-->Text file encoding 選擇就可以了
java 讀取mysql出現中文亂碼?
這個是字元集設定出了問題。首先要看你的資料庫是什麼字元集。mysql 4.x的多用GBK gb2312一類的中文字元集,5.x以後多用utf8的。
在確定了資料庫本身的字元集以後,你再確定你前台程式使用的啥語言。一般java預設的就是utf8 如果不是,你就改成和資料庫一樣的字元集。只有你2個地方的字元集對應了,才能正常顯宴悉示。
java檔案中的中文亂碼怎麼解決
原因是寫入時使用的字元編碼和期望的不一致導致的,因為JVM虛擬機器啟動時會因不同的引數使用不同的預設字元編碼。
資料庫匯入sql後中文亂碼怎麼解決
肯定是它的資料庫和你的資料庫的編碼不一致。
檢視他的資料庫的編碼,比如為A編碼。
檢視你的資料庫的編碼,比如為B編碼。
用ultraedit開啟指令碼檔案(給你的sql檔案),另存為另一個檔案(儲存時選擇你的編碼B)
然後再匯入。
在Servlet寫插入資料庫時出現中文亂碼。怎樣解決?拜託了各位 謝謝
寫入資料庫出現中文亂碼?你接收的資料就是亂碼吧...寫入資料庫是不會出現這問題的..你自己看看你接收到的資料是不是就亂碼了
求高手解決java 讀取mysql資料庫資料時的中文亂碼問題!急 急 急
根據下面這幾個步驟,選擇操作
① 首先把MySQL的服務停掉 在執行視窗輸入: s mysql
② 把伺服器和客戶端的字元集改成自己想用的字元集:GB2312或是utf8等……
具體操作為:開啟mysql安裝目錄下的myini.tet;
找到default-character-set,將其改為自己想用的字元集:GB2312或是utf8等……,要注意的是這里有兩個default-character-set,用ctrl+f定位在檔案最前面輸入default就會找到,都要改過來;
③ 重啟MySQL伺服器,在執行視窗輸入: start mysql
④ 最重要的是一點是,到這里我們已經能夠解決亂碼問題了,可問題是我們依然還會出現亂碼問題,這是因為我們現在的表被建立的時候用的是預設的字元集(latin1),所以這時候我們要把表刪除,然後重建就可以了
Ⅲ 為什麼java編程中寫的漢字變成亂碼了
你的編碼格式選擇的不對,右鍵單擊項目,點擊Properties:
將格式換成GBK或者UTF-8就行了
Ⅳ java爬蟲一段話里的部分字元亂碼解決
1. 網路爬蟲亂碼的原因。
源網頁的編碼與抓取後的編碼轉換不一致。如果源網頁是gbk編碼的位元組流,程序在我們抓取後直接用utf-8編碼輸出到存儲文件,這必然會造成亂碼,即當源網頁編碼與程序抓取後直接處理編碼一致時,就不會出現亂碼,然後統一字元編碼後也就不會出現亂碼。注意區分源網路代碼A,程序B直接使用的代碼,統一轉換字元的代碼C。
2. 是網頁的伺服器端代碼。
B.捕獲的數據原本是位元組數組,由A編碼,只有B=A才能保證不會出現亂碼;否則,當字元集不兼容時,就會出現亂碼字元。這一步常用於測試。
c、統一轉碼是指在獲得網頁的原始編碼A後進行統一編碼,主要是將每個網頁的數據統一成一種編碼,往往首選字元集較大的utf-8。
每個網頁都有自己的代碼,比如gbk,utf-8,iso8859-1,日本jp系統代碼,西歐,俄語等等。爬行時,所有類型的代碼都將被擴展。有的爬蟲只是簡單的識別網頁,然後統一編碼,有的則直接按照utf-8統一處理,不需要判斷源網頁,顯然會造成亂碼。
3. 亂碼的解決方案。
根據原因找到解決辦法很簡單。
1) 確定源網頁的代碼a。
代碼a通常位於網頁的三個位置,即httpheader的內容、網頁的元字元集和網頁標題中的文檔定義。獲取源網頁代碼時,依次判斷這三部分數據,從頭到尾優先順序相同。
理論上這是對的,但是國內有些網站不符合標准。比如寫出來的gbk其實是utf-8,有的寫出來是utf-8,其實是gbk。當然這是幾個網站,但是確實存在。因此,在確定網頁編碼時,應該對這種特殊情況給予特殊處理,如中文檢查、默認編碼等策略。
在另一種情況下,如果以上三種都沒有編碼信息,一般使用第三方的網頁編碼智能識別工具,如cpdetector。原理是通過統計位元組數組的特性來計算實際編碼,有一定的准確率,但是我發現在實踐中准確率還是很有限的。
但是綜合以上三種編碼確認方法後,中文亂碼的問題幾乎可以完全解決。在我的基於nutch1.6的網路爬蟲系統中,經過統計,編碼准確率可以達到99.99%,這也證明了上述方法和策略的可行性。
2) 程序通過代碼b還原源網頁數據。
顯然,這里的B應該等於a,在java中,如果源網頁的位元組數組是source_byte_array,就會轉換成stringstr=newstring(source_byte_array,B)。即這些位元組數組對應的字元被正確編碼顯示在內存中,此時列印結果正常。此步驟通常用於調試或控制台輸出測試。
3) 統一轉碼。
網路爬蟲系統中有很多數據源。如果無法使用數據,它將被轉換為其原始數據,如果這樣做是浪費的。所以一般爬蟲系統要對抓取的結果進行統一編碼,做到一致,使用方便。此時,在(2)的基礎上,可以進行統一的編碼轉換,在java中的實現如下。
源網頁的位元組數組是source_byte_array。
轉換為普通字元串:stringnormal_source_str=newstring(source_byte_array,c)。這時候可以直接用javaapi存儲,但是字元串往往不直接寫。因為一般爬蟲存儲是將多個源網頁存儲在一個文件中,所以要記錄位元組偏移量,所以下一步。 再將得到的str轉換為統一的編碼C格式的位元組數組,則byte[] new_byte_array=normal_source_str.getBytes(C)即可,此時即可用java io api將數組寫入文件,並記錄相應的位元組數組偏移量等,待真正使用時,直接io讀取即可。
爬蟲過程不僅會存在亂碼問題,還會存在網站爬取涉及法律、IP受限,爬取行為受限等等問題,這個時候就需要不斷去解決這些問題。
Ⅳ java中文亂碼問題
亂碼問題也是我一直覺得比較蛋疼的問題,下面是我在網上看到的,樓主可以參考一下
一、Java中文問題的由來
Java的內核和class文件是基於unicode的,這使Java程序具有良好的跨平台性,但也帶來了一些中文亂碼問題的麻煩。原因主要有兩方面,Java和JSP文件本身編譯時產生的亂碼問題和Java程序於其他媒介交互產生的亂碼問題。
首先Java(包括JSP)源文件中很可能包含有中文,而Java和JSP源文件的保存方式是基於位元組流的,如果Java和JSP編譯成class文件過程中,信嘩使用的編碼方式與源文件的編碼不一致,就會出現亂碼。基於這種亂碼,建議在Java文件中盡量不要寫中文(注釋部分不參與編譯,寫中文沒關系),如果必須寫的話,盡量手動帶參數-ecoding GBK或-ecoding gb2312編譯;對於JSP,在文件頭加上或基本上就能解決這類亂碼問題。
本文要重點討論的是第二類亂碼,即Java程序與其他伏坦返存儲媒介交互時產生的亂碼。很多存儲媒介,如資料庫,文件,流等的存儲方缺飢式都是基於位元組流的,Java程序與這些媒介交互時就會發生字元(char)與位元組(byte)之間的轉換,具體情況如下:
從頁面form提交數據到java程序 byte->char
從java程序到頁面顯示 char?>byte
從資料庫到java程序 byte?>char
從java程序到資料庫 char?>byte
從文件到java程序 byte->char
從java程序到文件 char->byte
從流到java程序 byte->char
從java程序到流 char->byte
如果在以上轉換過程中使用的編碼方式與位元組原有的編碼不一致,很可能就會出現亂碼。
二、解決方法
前面已經提到了Java程序與其他媒介交互時字元和位元組的轉換過程,如果這些轉換過程中容易產生亂碼。解決這些亂碼問題的關鍵在於確保轉換時使用的編碼方式與位元組原有的編碼方式保持一致,下面分別論述(Java或JSP自身產生的亂碼請參看第一部分)。
1、JSP與頁面參數之間的亂碼
JSP獲取頁面參數時一般採用系統默認的編碼方式,如果頁面參數的編碼類型和系統默認的編碼類型不一致,很可能就會出現亂碼。解決這類亂碼問題的基本方法是在頁面獲取參數之前,強制指定request獲取參數的編碼方式:request.setCharacterEncoding("GBK")或request.setCharacterEncoding("gb2312")。
如果在JSP將變數輸出到頁面時出現了亂碼,可以通過設置response.setContentType("text/html;charset=GBK")或response.setContentType("text/html;charset=gb2312")解決。
如果不想在每個文件里都寫這樣兩句話,更簡潔的辦法是使用Servlet規范中的過慮器指定編碼,過濾器的在web.xml中的典型配置和主要代碼如下:
web.xml:
CharacterEncodingFilter
net.vschool.web.CharacterEncodingFilter
encodingGBK
CharacterEncodingFilter
/*
CharacterEncodingFilter.java:
public class CharacterEncodingFilter implements Filter
{
protected String encoding = null;
public void init(FilterConfig filterConfig) throws ServletException
{
this.encoding = filterConfig.getInitParameter("encoding");
}
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException
{
request.setCharacterEncoding(encoding);
response.setContentType("text/html;charset="+encoding);
chain.doFilter(request, response);
}
}
2、Java與資料庫之間的亂碼
大部分資料庫都支持以unicode編碼方式,所以解決Java與資料庫之間的亂碼問題比較明智的方式是直接使用unicode編碼與資料庫交互。很多資料庫驅動自動支持unicode,如Microsoft的SQLServer驅動。其他大部分資料庫驅動,可以在驅動的url參數中指定,如如mm的mysql驅動:jdbc:mysql://localhost/WEBCLDB?useUnicode=true&characterEncoding=GBK。
3、Java與文件/流之間的亂碼
Java讀寫文件最常用的類是FileInputStream/FileOutputStream和FileReader/FileWriter。其中FileInputStream和FileOutputStream是基於位元組流的,常用於讀寫二進制文件。讀寫字元文件建議使用基於字元的FileReader和FileWriter,省去了位元組與字元之間的轉換。但這兩個類的構造函數默認使用系統的編碼方式,如果文件內容與系統編碼方式不一致,可能會出現亂碼。在這種情況下,建議使用FileReader和FileWriter的父類:InputStreamReader/OutputStreamWriter,它們也是基於字元的,但在構造函數中可以指定編碼類型:InputStreamReader(InputStream in, Charset cs) 和OutputStreamWriter(OutputStream out, Charset cs)。
4、其他
上面提到的方法應該能解決大部分亂碼問題,如果在其他地方還出現亂碼,可能需要手動修改代碼。解決Java亂碼問題的關鍵在於在位元組與字元的轉換過程中,你必須知道原來位元組或轉換後的位元組的編碼方式,轉換時採用的編碼必須與這個編碼方式保持一致。我們以前使用Resin伺服器,使用smartUpload組件上傳文件,上傳文件同時傳遞的中文參數獲取沒有亂碼問題。當在Linux中把Resin設置成服務後,上傳文件同時的中文參數獲取出現了亂碼。這個問題困擾了我們很久,後來我們分析smartUpload組件的源文件,因為文件上傳採用的是位元組流的方式,裡麵包含的參數名稱和值也是位元組流的方式傳遞的。smartUpload組件讀取位元組流後再將參數名稱和值從位元組流中解析出來,問題就出現在smartUpload將位元組流轉換成字元串時採用了系統默認的編碼,而將Resin設置成服務後,系統默認的編碼可能發生了改變,因此出現了亂碼。後來,我們更改了smartUpload的源文件,增加了一個屬性charset和setCharset(String)方法,將upload()方法中提取參數語句:
String value = new String(m_binArray, m_startData, (m_endData - m_startData) + 1 );
改成了
String value = new String(m_binArray, m_startData, (m_endData - m_startData) + 1, charset );
出處:http://www.enet.com.cn/article/2008/0229/A20080229170410.shtml
Ⅵ 如何解決JavaEE開發中字元編碼出現亂碼問題
1、瀏覽器調用jsp,html等頁面中文顯示亂碼
此情況需滿足兩個要求:
(1)文件本身是以utf-8編輯保存的(myEclipse中在properties中滑鼠右鍵選擇utf-8)
(2)瀏覽器用utf-8解析:
(手動)==> 在瀏覽器中右鍵選擇編碼格式為utf-8
(智能)==> 在文件中寫入如: <meta name="content-type" content="text/html; charset=UTF-8"> 通過<meta>標簽模擬response頭,起到告訴瀏覽器好謹用utf-8的編碼解析
(智能)==> response.setContentType("text/html;charset=UTF-8");起到告訴瀏覽器用utf-8的編碼解析
常用:
<meta name="content-type" content="text/html; charset=UTF-8">或<meta charset="utf-8">
<%@ pageEncoding="utf-8"%>
<?xml encoding="UTF-8"?>
2、通過瀏覽器調用servlet,頁面顯示亂碼。
Servlet亂碼分為request亂碼和response亂碼;
(1)response亂碼問題
解決方法:
在網上很有效的解決方法是添加嘩鬧:
response.setCharacterEncoding("UTF-8");
解決不了,後來又搜到一條解決方法是:
response.setContentType("text/html;charset=utf-8");或者 response.setHeader("content-type","text/html;charset=UTF-8");告訴瀏覽器用utf-8解析。(setHeader是HttpServletResponse的方法。如果想在攔截器Filter中設置亂襪罩字元編碼,則無此方法,因為Filter的doFilter方法的參數類型是ServletResponse)
兩句都填上,後來終於解決了這個問題;
其實我們應該思考一下本質:
response.setContentType("text/html;charset=UTF-8"); 目的是為了控制瀏覽器的行為,即控制瀏覽器用UTF-8進行解碼;
response.setCharacterEncoding("UTF-8");目的是用於response.getWriter()輸出的字元流的亂碼問題。如果是response.getOutputStream()是不需要此種解決方案的,因為這句話的意思是為了將response對象中的數據以UTF-8解碼後的位元組流發向瀏覽器;
Ⅶ Java編碼時輸入漢字出現亂碼解決方法
java文件讀取的時候有中文就很出現亂碼,通常獲取到的文件中通常都是「iso8859-1」格式,需要轉換為「UTF-8」格式。
如:String str = new String(str.getByte("iso8859-1"),"UTF-8");進行下強制轉換後在進行讀取即可。
備註:通常格式有GBK、UTf-8、iso8859-1、GB2312,如果上面的強制轉換不成功,依次進行這些格式的嘗試,肯定是可以解決問題的。
Ⅷ 如何解決Java項目中的中文亂碼
設置工作空間的編碼:
編輯器的編碼會影響到所有的項目中的字元的顯示,可以說是作用最為廣泛的設置,每一個項目都會受到這個設置的影響。點擊菜單欄中的窗口(Window)— —選項(Preferences)。
點擊常規(General)— —工作空間(Wordspace),然後在右側的文本文件編碼格式(Text file encoding)中選擇你想要設置的編碼格式,系統默認的格式為GBK。
設置項目的編碼:
如果其他的項目中不存在亂碼問題,只是個別項目顯示時出現亂碼,那麼我們不需要設置工作空間的編碼,只需要修改項目的編碼即可。
選中項目後,右鍵點擊,在彈出的菜單中點擊屬性(Properties)。
在彈出的屬性窗口中,選擇資源(Resource)— —點擊選擇Other(其他),然後選擇你想要的編碼格式。
設置單個文件的編碼:
只是個別文件出現了亂碼,那麼設置個別文件的編碼格式就可以解決問題了。選中有亂碼的文件,然後點擊右鍵。
在彈出的菜單中選擇屬性(Properties)。
在彈出的屬性窗口中選擇資源,點擊Other(其他)後設置個別文件的編碼方式
Ⅸ Java代碼出現了亂碼怎麼辦
運行java帶有中文的代碼就出現亂碼,解決方式如下:
設置整個java工程的編碼格式為utf-8,如下圖:
設置html的編碼格式為utf-8