如果在ABAP FTP中处理中文名的文件名?

[复制链接]
查看11 | 回复9 | 2005-12-30 09:49:44 | 显示全部楼层 |阅读模式
由于R&D中心需要把图纸上传到FTP服务器上,所以做了一个FTP方式的上传本地文件到FTP服务器的程序,程序做完但是出现了一些问题,贴出来大家讨论,以便给予本人解决。现谢谢各位的参与和恢复。
问题:
1、上传的文件名称为英文或数字时没有问题,但是当文件名为中文时,传到服务器上的文件中文名称部分就全变为了#号。
例如:本地文件名为:FILE123.TXT上传到服务器上文件名称还是为:FILE123.TXT
本地文件名为:文件123.TXT 上传到服务器上文件名称变成了:###123.TXT
在调试跟中时走道CALL FUNCTION 'FTP_R3_TO_SERVER' 时,name2在系统中还是中文显示,

函数完成,程序结束,文件传到服务器上,名称变为#号。
2、如果服务器上存放文件的路径有中文,上传出现错误。

例如:服务器路径 ftp://172.16.0.128/SAVEFILE/

ftp://172.16.0.128/保存文件/

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

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

CONCATENATEfilename '' 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.
CONCATENATEfilename '' 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_fileUSINGl_filenamel_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_0100INP
回复

使用道具 举报

千问 | 2005-12-30 09:49:44 | 显示全部楼层
我猜这个应该和你R/3版本的UNICODE有关
以前处理的都是英文数字文件名,明天试下中文的.
回复

使用道具 举报

千问 | 2005-12-30 09:49:44 | 显示全部楼层
楼上可测试通过了?
回复

使用道具 举报

千问 | 2005-12-30 09:49:44 | 显示全部楼层
项一下,遇到同样的问题正在寻找答案
试过将文件dataset到SAP服务器下,然后通过 ftp_command 函数 + 'put 中文文档.doc 中文文档.doc'
下载到ftp中的文件名还是: ####.doc
如果采用SAPFTP连接方式,则没有这类问题,但主要是做接口函数,必须使用SAPFTPA方式进行ftp连接。
[ 本帖最后由 ruyue318 于 2009-6-4 17:44 编辑 ]
回复

使用道具 举报

千问 | 2005-12-30 09:49:44 | 显示全部楼层
呵呵,我试验了下好像我可以显示中文的。不过如果实在不行自己对字符串进行编码转换
cl_abap_conv_obj 类,或者SCP_TRANSLATE_CHARS function
回复

使用道具 举报

千问 | 2005-12-30 09:49:44 | 显示全部楼层
试了一下FM: SCP_TRANSLATE_CHARS 对文件名进行字符转换,出来的结果还是一样。
回复

使用道具 举报

千问 | 2005-12-30 09:49:44 | 显示全部楼层
哦,学习
回复

使用道具 举报

千问 | 2005-12-30 09:49:44 | 显示全部楼层
原帖由 rijkard 于 2009-6-4 14:36 发表
哦,学习

问题还没解决,一起研究吧。
回复

使用道具 举报

千问 | 2005-12-30 09:49:44 | 显示全部楼层
我感觉不像是SAP这边的问题吧。
直接通过FTP客户端软件在FTP Server上能创建带中文的路径和文件么?
我这里没有FTP Server的口令,没法测。我这里是在程序里用Unix命令往server上写文件的,不过都是英文。
回复

使用道具 举报

千问 | 2005-12-30 09:49:44 | 显示全部楼层
文件名要区分大小,
如果还不行,为什么不试试dataset呢,
我在这边测试使用dataset可以正常传输文件名包含中文的文件
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行