2017-07-14 141 views
0

我特林编写测试脚本上传文件到FTP,我的系统是窗口7.当我使用Windows资源管理器来观看FTP ,所有中国人都错了Charactor.Using火狐看,在GBK encode.all文件的名称是right.Now我想在GBK编码名称上传文件,所以Firefox会看到所有的名字right.Here的我特林:上传文件到FTP,在GB2312 URL名称,而不是UTF-8模式

$coder1= [system.Text.encoding]::GetEncoding('GB2312') 
$coder2 = [system.Text.encoding]::UTF8 

$user = "test" 
$password = "test" 
$ftp = 'ftp://10.10.10.253/shzx/' 
$souce = '新建文本文档.txt' 
$loacalfile = Get-Item w:\test\新建文本文档.txt 
$souce1 = [system.Web.HttpUtility]::UrlEncode($souce,$coder1) 
$encodeA = $ftp+$souce 


$request = [system.Net.FtpWebRequest]::Create($encodeA) 
$request = [system.Net.FtpWebRequest]$request 
$request.Method=[system.Net.WebRequestMethods+FTP]::uploadfile 
$request.Credentials = New-Object system.Net.NetworkCredential($user,$password) 
$request.UseBinary = $true 
$request.UsePassive = $true 

$dest = $request.GetRequestStream() 
$src = [system.IO.File]::OpenRead($loacalfile) 
$buffsize = [system.Math]::Min($src.length , 4096) 
$buff = New-Object system.Byte[] $buffsize 

$numbuffloaded = 0 
$byteread = 0 

do 
{ 
    $byteread = $src.read($buff,0,$buffsize) 
    $dest.write($buff,0,$buffsize) 
    $numbuffloaded ++ 
} 
while($byteread -ne 0) 

$dest.close() 
$src.close() 

$response = $request.GetResponse() 

而我上传测试文件后,名称是不正确的。无论使用UTF8或GBK使用Firefox进行编码观看它。我猜FTP服务器认为我的编码url仍然是UTF8。所以它错误解码。而且,如果我使用UTF8编码URL上传,至少FTP文件名称是正确的,当我设置UTF8的Firefox编码。 有没有办法让FTP服务器正确解码?我应该设置ftpwebrequest.Headers还是其他?

回答

0

你不能选择的编码与FtpWebRequest使用。

FtpWebRequest开始的连接时发送OPTS utf8 on命令给服务器。

如果服务器积极响应,FtpWebRequest将使用UTF-8。如果不是,FtpWebRequest将使用本地Windows旧版字符集。

因此,所有你能做到这一点设置本地传统字符设置为GB2312936?)。假设服务器对OPTS utf8 on做出了负面反应。

+0

非常感谢。这是该功能的工作原理。最后我知道我的工作为什么不起作用。我会选择另一种方式来做到这一点。 – yubo2025

+0

不客气。虽然在堆栈溢出,我们感谢接受答案。 –