文件名带中文上传ftp服务器变乱码,FTP上传文件时文件的中文名称变为#号,解决方法...

由于R&D中心需要把图纸上传到FTP服务器上,所以做了一个FTP方式的上传本地文件到FTP服务器的程序,程序做完但是出现了一些问题,贴出来大家讨论,以便给予本人解决。现谢谢各位的参与和恢复。

问题:

1、上传的文件名称为英文或数字时没有问题,但是当文件名为中文时,传到服务器上的文件中文名称部分就全变为了#号。

例如:本地文件名为:FILE123.TXT      上传到服务器上文件名称还是为:FILE123.TXT

本地文件名为:文件123.TXT       上传到服务器上文件名称变成了:###123.TXT

在调试跟中时走道CALL FUNCTION 'FTP_R3_TO_SERVER' 时,name2在系统中还是中文显示,

函数完成,程序结束,文件传到服务器上,名称变为#号。

2、如果服务器上存放文件的路径有中文,上传出现错误。

例如:服务器路径

保存文件/

第一种  filename  = '/SAVEFILE/FILE123.TXT'.

第二种 filename  = '/保存文件/FILE123.TXT'.

CONCATENATE  filename '' INTO name2.

这两种格式,第一种文件上传成功,第二种提示“FTP子命令:服务器报表错误”。

按照网上的提示把系统变量SAP_CODEPAGE 设置为 8400 等,都没有解决问题.

测试FTP 服务器为WIN2003 SERVER版,系统自带IIS设置.

DATA: hdl TYPE i,

key TYPE i VALUE 26101957,

dstlen TYPE i,

slen TYPE i,

blob_length TYPE i.

DATA filepath TYPE string .

DATA: BEGIN OF blob OCCURS 0,

line(100) TYPE x,

END OF blob.

DATA: result TYPE TABLE OF text WITH HEADER LINE.

DATA:filename1 TYPE string,

path TYPE string,

fullpath TYPE string.

PARAMETERS:

user(30) TYPE c LOWER CASE DEFAULT 'test',

pwd(30) TYPE c LOWER CASE DEFAULT 'test',

host(64) TYPE c LOWER CASE DEFAULT '172.16.0.128',

filename(80) TYPE c DEFAULT 'test.xls',

name2(80) TYPE c DEFAULT 'test.xls',

dest LIKE rfcdes-rfcdest DEFAULT 'SAPFTP'.

PARAMETERS: p_file LIKE rlgrap-filename   DEFAULT 'c:\test.xls'.

AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_file.

PERFORM get_p_file USING p_file text-006.

START-OF-SELECTION.

*  CALL SCREEN 100.

*END-OF-SELECTION .

CALL 'AB_RFC_X_SCRAMBLE_STRING'

ID 'SOURCE'  FIELD pwd

ID 'KEY'  FIELD key

ID 'SCR'  FIELD 'X'

ID 'DESTINATION'  FIELD pwd

ID 'DSTLEN'  FIELD dstlen.

slen = STRLEN( pwd ).

CALL FUNCTION 'HTTP_SCRAMBLE'

EXPORTING

SOURCE      = pwd

sourcelen   = slen

key         = key

IMPORTING

destination = pwd.

CALL FUNCTION 'FTP_CONNECT'

EXPORTING

user            = user

password        = pwd

host            = host

rfc_destination = dest

IMPORTING

handle          = hdl.

filepath = p_file.

CALL FUNCTION 'GUI_UPLOAD'

EXPORTING

filename   = filepath

filetype   = 'BIN'

IMPORTING

filelength = blob_length

TABLES

data_tab   = blob.

WRITE ''.

CALL FUNCTION 'CH_SPLIT_FILENAME'

EXPORTING

complete_filename = filepath

IMPORTING

name_with_ext     = name2.

WRITE: AT / 'Get ',p_file,' Length: ',blob_length.

CONCATENATE  filename '' INTO name2.

CALL FUNCTION 'FTP_R3_TO_SERVER'

EXPORTING

handle      = hdl

fname       = name2

blob_length = blob_length

TABLES

blob        = blob.

*  CALL FUNCTION 'FTP_COMMAND'

*    EXPORTING

*      handle   = hdl

*      command  = 'PUT'

*    IMPORTING

*      filesize = blob_length

*    TABLES

*      data     = blob.

WRITE: AT / 'Put ',name2.

CALL FUNCTION 'FTP_DISCONNECT'

EXPORTING

handle = hdl.

FORM get_p_file  USING    l_filename    l_text.

CALL FUNCTION 'WS_FILENAME_GET'

EXPORTING

def_filename     = space

def_path         = l_filename

mask             = ',*.dwg ,*.dwg.'

mode             = 'O'

title            = l_text

IMPORTING

filename         = l_filename

EXCEPTIONS

inv_winsys       = 04

no_batch         = 08

selection_cancel = 12

selection_error  = 16.

ENDFORM.                    " get_p_file*Text elements

*----------------------------------------------------------------------*

*  MODULE user_command_0100 INPUT

*----------------------------------------------------------------------*

*

*----------------------------------------------------------------------*

MODULE user_command_0100 INPUT.

CASE sy-ucomm.

WHEN 'EXIT'.

CALL FUNCTION 'GUI_FILE_LOAD_DIALOG'

EXPORTING

window_title            = 'DWG引入'

default_extension       = 'DWG'

*   DEFAULT_FILE_NAME       = 'DWG'

*   WITH_ENCODING           =

*   FILE_FILTER             =

initial_directory       =  'C:\'

IMPORTING

filename                = filename1

path                    =  path

fullpath                =  fullpath

*   USER_ACTION             =

*   FILE_ENCODING           =

.

filename1 = fullpath.

ENDCASE.

CLEAR sy-ucomm.

ENDMODULE.                 " USER_COMMAND_0100  INP

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 出现中文文件名乱码的原因是可能因为jsftp默认使用ASCII编码,而中文文件名使用的是UTF-8编码。解决方法可以在jsftp的配置中指定编码为UTF-8,例如: ```javascript var Ftp = require('jsftp'); var ftp = new Ftp({ host: 'ftp.example.com', user: 'username', password: 'password', encoding: 'utf8' // 指定编码为UTF-8 }); ``` 这样在拉取文件列表中文文件名就能正确显示了。 ### 回答2: 在JavaScript中使用FTP来拉取文件列表,如果文件名中包含中文字符并显示乱码,可以采取以下解决方法: 1. 确保使用UTF-8编码格式:使用FTP客户端连接服务器,确认服务器端设置为UTF-8编码格式,以便正确解析中文字符。 2. 解码中文字符:在JavaScript中,通过对中文字符进行相应解码操作来处理乱码问题。可以使用decodeURIComponent()函数来对乱码文件名进行解码。 举例来说,如果从FTP服务器中获取到的文件名为"%E4%B8%AD%E6%96%87%E6%96%87%E4%BB%B6.txt",则可以使用以下代码解码: ```javascript var encodedFileName = "%E4%B8%AD%E6%96%87%E6%96%87%E4%BB%B6.txt"; var decodedFileName = decodeURIComponent(encodedFileName); console.log(decodedFileName); // 输出:"中文文件.txt" ``` 3. 使用node.js的FTP库:如果在Node.js环境下进行FTP文件列表拉取,可以使用一些已有的FTP库,如"ftp"或"jsftp",这些库具有更好的中文文件名支持,可以自动解决乱码问题。 以上是解决JavaScript中使用FTP拉取文件列表中文文件名乱码方法。通过正确设置编码格式、解码中文字符或使用特定的FTP库,可以正常获取中文文件名并避免乱码问题。 ### 回答3: 当js使用FTP拉取文件列表,如果中文文件名出现乱码,可以采取以下解决方法: 1. 确保FTP服务器和客户端编码一致:在js中使用的编码方式必须与FTP服务器的编码方式保持一致,例如UTF-8或GBK等。可以通过在js中设置编码方式来保持一致。如果FTP服务器编码方式未知,可以尝试使用不同的编码方式进行测试,找到与服务器编码一致的方式。 2. 采用Base64编码方式传输文件名:由于FTP协议对中文文件名的支持不一致,采用Base64编码方式可以解决中文文件名乱码问题。在js中将中文文件名进行Base64编码后,再发送给FTP服务器,服务器接收后进行解码。这样可以确保文件名的正确传输。 3. 修改FTP服务器配置:某些FTP服务器默认不支持中文文件名的显示,需要进行相应的配置修改。例如在vsftpd服务器中,可以通过配置文件中添加"utf8_filesystem=YES"来支持中文文件名的显示。修改服务器配置后,js拉取文件列表可以正常显示中文文件名。 4. 处理乱码后进行转换:如果在js拉取文件列表仍然出现中文文件名乱码,可以尝试对乱码进行处理和转换。使用js的转换函数将乱码转换为正确的中文文件名。根据具体的乱码形式和编码方式来选择合适的转换方法,例如使用iconv-lite库进行编码转换。 总之,解决js拉取FTP文件列表中文文件名乱码问题,需要确保编码方式一致,使用Base64编码方式传输文件名,修改FTP服务器配置或者处理乱码后进行转换等方法。根据具体情况采取不同的解决方案。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值