我正在尝试编写测试脚本以将文件上传到FTP。我的系统是Windows7。当我使用Windows资源管理器观看FTP时,所有中文都使用错误的字符。使用Firefox观看GBK编码的所有文件名都是正确的。现在,我要以GBK编码名称上传文件,因此Firefox会正确显示所有名称。这是我的尝试:
$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()
并且我上传测试文件后,名称不正确。无论使用Firefox观看UTF8还是GBK编码,都可以观看。我猜FTP服务器认为我的文件名编码仍然是UTF-8。因此,它会错误地解码。如果我使用UTF8编码名称上传,则当我在UTF8中设置Firefox编码时,至少FTP文件名将正确。有没有办法使FTP服务器解码正确?我应该设置FtpWebRequest.Headers
还是其他?
您无法选择FtpWebRequest
使用的编码。
FtpWebRequest
在开始连接时将OPTS utf8 on
命令发送到服务器。
如果服务器做出肯定响应,则FtpWebRequest
将使用UTF-8。否则,FtpWebRequest
将使用本地Windows旧版字符集。
因此您可以将本地旧版字符集设置为GB2312
(936
?)。假设服务器对OPTS utf8 on
的响应为否。