『壹』 使用java連接linux,執行shell命令返回值有亂碼,怎麼解決
packagecom.pasier.xxx.util;
importjava.io.IOException;
importjava.io.InputStream;
importjava.nio.charset.Charset;
importorg.slf4j.Logger;
importorg.slf4j.LoggerFactory;
importch.ethz.ssh2.ChannelCondition;
importch.ethz.ssh2.Connection;
importch.ethz.ssh2.Session;
importch.ethz.ssh2.StreamGobbler;
publicclassRmtShellExecutor{
privatestaticfinalLoggerLOG=LoggerFactory.getLogger(RmtShellExecutor.class);
privateConnectionconn;
privateStringip;
privateStringusr;
privateStringpsword;
privateStringcharset=Charset.defaultCharset().toString();
privatestaticfinalintTIME_OUT=1000*5*60;
publicRmtShellExecutor(Stringip,Stringusr,Stringps){
this.ip=ip;
this.usr=usr;
this.psword=ps;
}
privatebooleanlogin()throwsIOException{
conn=newConnection(ip);
conn.connect();
returnconn.authenticateWithPassword(usr,psword);
}
publicStringexec(Stringcmds)throwsIOException{
InputStreamstdOut=null;
InputStreamstdErr=null;
StringoutStr="";
StringoutErr="";
intret=-1;
try{
if(login()){
Sessionsession=conn.openSession();
session.execCommand(cmds);
stdOut=newStreamGobbler(session.getStdout());
outStr=processStream(stdOut,charset);
LOG.info("caijl:[INFO]outStr="+outStr);
stdErr=newStreamGobbler(session.getStderr());
outErr=processStream(stdErr,charset);
LOG.info("caijl:[INFO]outErr="+outErr);
session.waitForCondition(ChannelCondition.EXIT_STATUS,TIME_OUT);
ret=session.getExitStatus();
}else{
LOG.error("caijl:[INFO]ssh2loginfailure:"+ip);
thrownewIOException("SSH2_ERR");
}
}finally{
if(conn!=null){
conn.close();
}
if(stdOut!=null)
stdOut.close();
if(stdErr!=null)
stdErr.close();
}
returnoutStr;
}
privateStringprocessStream(InputStreamin,Stringcharset)throwsIOException{
byte[]buf=newbyte[1024];
StringBuildersb=newStringBuilder();
while(in.read(buf)!=-1){
sb.append(newString(buf,charset));
}
returnsb.toString();
}
publicstaticvoidmain(String[]args){
Stringusr="root";
Stringpassword="12345";
StringserverIP="11.22.33.xx";
StringshPath="/root/ab.sh";
RmtShellExecutorexe=newRmtShellExecutor(serverIP,usr,password);
StringoutInf;
try{
outInf=exe.exec("sh"+shPath+"xn");
System.out.println("outInf="+outInf);
}catch(IOExceptione){
e.printStackTrace();
}
}
}
『貳』 java在linux系統下文件夾出現中文亂碼的問題
問題描述:
linux的默認字元編碼是utf-8,在linux上存的是中文名的文件,但是用java讀出來就是亂碼,全是??????然後我通過:new
String(files[i].getName().getBytes("GB2312"),"UTF-8");這樣處理一下,中文文件名全變成了?????,應該怎麼轉碼才能獲取中文?
問題答案:
Java
中的字元編碼默認是Unicode
用new
String(files[i].getName().getBytes("UTF-8"),"UTF-8");試下看對我有幫助
用utf8格式上傳,然後再用utf8格式下載就好了,但是伺服器上存的是亂碼的,遍歷出來是中文的。
『叄』 java讀取linux下文件名亂碼
Linux下讀取文件名亂碼可能的原因是:
1.linux系統默認編碼不支持中文字元
2.文件名本身是亂碼
解決方案是在讀取文件名的時候,要進行顯式的編碼轉換如下:
FileInputStreamfis=newFileInputStream("fileName");
InputStreamReaderisr=newInputStreamReader(fis,"utf-8");
『肆』 java在linux下創建文件,中文文件名為亂碼。請問這個問題是怎麼解決的,謝謝~
修改linux的編碼方式。或者不要命名中文。最好是不要命名為中文
『伍』 java web在Linux上傳輸的亂碼的求解
你本地和LINUX的編碼不一致所導致的亂碼
解決如下:
1、設置request的編碼 new String(request.getParameter("參數名").getBytes("iso-8859-1"), "gbk");
將默認的iso-8859-1轉為gbk 不行的話就多換幾種編碼
2、設置LINUX的編碼
命令行敲入:vi /etc/sysconfig/i18n 修改為以下內容
#LANG="zh_CN.UTF-8"
#SUPPORTED="zh_CN.UTF-8:zh_CN:zh"
#SYSFONT="latarcyrheb-sun16"
#LANG="en_US.UTF-8"
#SUPPORTED="en_US.UTF-8:en_US:en"
#SYSFONT="latarcyrheb-sun16"
LANG="zh_CN.GB18030"
LANGUAGE="zh_CN.GB18030:zh_CN.GB2312:zh_CN"
SUPPORTED="zh_CN.GB18030:zh_CN:zh:en_US.UTF-8:en_US:en"
SYSFONT="lat0-sun16"
export LC_ALL="zh_CN.GB18030"
建議如上 不喜勿噴
『陸』 Java代碼出現了亂碼怎麼辦
運行java帶有中文的枝燃代碼就出現亂碼,解決方式如下:辯塌
設置整個猛灶虛java工程的編碼格式為utf-8,如下圖:
設置html的編碼格式為utf-8
『柒』 通過java控制linux環境下解壓文件夾後中文文件名是亂碼
壓縮成rar格式的再試試
『捌』 如何解決 linux 的亂碼問題
出現這種情況的原因為兩種操作系統的中文壓縮方式不同,在windows環境中中文壓縮一般為gbk,而在linux環境中為utf8,這就導致了在windows下能正常顯示
txt文件在linux環境下打開呈現了亂碼狀態。
解決方法:在linux用iconv命令,輸入命令如下
iconv -f gbk -t utf8 file.pdf > file.pdf.utf8
此時會重生一file.utf8文件,打開之後就能正常顯示中文
linux系統下修改語言配置方法有:
法一:修改/etc/profile文件,增加export LANG=zh_CN.GB18030
法二:修改/etc/sysconfig/i18n文件,將
#LANG="en_US.UTF-8"
#SUPPORTED="en_US.UTF-8:en_US:en"
#SYSFONT="latarcyrheb-sun16"
改為
LANG="zh_CN.UTF-8"
SUPPORTED="zh_CN:zh:en_US.UTF-8:en_US:en:zh_CN.GB18030"
SYSFONT="latarcyrheb-sun16"
/etc/profile: 為系統的每個用戶設置環境信息,當用戶第一次登錄時,該文件被執行.
/etc/sysconfig/i18n 這里存放的是系統的區域語言設置
LANG 表明你當前系統的語言環境變數設置 ,這里是 zh_CN.GB18030
SUPPORTED 表明系統預置了那些語言支持 ,不在項目中的語言不能正常顯示
SYSFONT 定義控制台終端字體,你文本登錄的時候顯示的字體是 latarcyrheb-sun16
I18N 是 internationalization 的縮寫形式,意即在 i 和 n 之間有 18 個字母,本意是指軟體的「國際化」.I18N支持多種語言,不過同一時間只能是英文和一種選定的語言,例如英文+中文、英文+德文、英文+韓文等等;
如果在SCRT上操作時中文亂碼,可依次點擊options--session options--appearance,選擇character encoding為UTF-8
『玖』 Java讀取linux系統中文文件名時候亂碼,並顯示文件不存在
我記得InputStreamReader和OutputStreamWriter不是可以設置編碼的嗎?
方式應該是:OutputStreamWriter writer = new OutputStreamWriter(fop, "UTF-8");
InputStreamReader reader = new InputStreamReader(fip, "UTF-8");
這樣還亂碼?那就二進制讀取就行了。
記得保證整個編譯環境編碼統一。