Download File in UTF-8 encoding

本文介绍如何使用 ABAP 编程语言从 MARA 表中选择数据,并将其转换为 UTF-8 编码的字符串,最终下载为文件。文中详细展示了创建类型池、数据结构定义、数据读取、字符集转换及文件下载的过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

REPORT z_test_utf8 NO STANDARD PAGE HEADING LINE-SIZE 125 .

TYPE-POOLS: abap.

TYPES:

BEGIN OF ty_mara,

matnr TYPE matnr,

END OF ty_mara,

BEGIN OF ty_string,

data TYPE string,

END OF ty_string.

DATA :

it_mara TYPE STANDARD TABLE OF ty_mara,

wa_mara TYPE ty_mara,

it_string TYPE STANDARD TABLE OF ty_string,

wa_string TYPE ty_string.

SELECT matnr

FROM mara

INTO TABLE it_mara UP TO 20 ROWS.

IF sy-subrc = 0.

SORT it_mara BY matnr.

ENDIF.

DATA:

v_string TYPE string,

v_xsrting TYPE xstring,

v_len TYPE i,

rc TYPE i VALUE 0,

v_encoding TYPE abap_encoding.

* Get the LOGON Encoding for the particular user

CALL METHOD cl_gui_frontend_services=>get_saplogon_encoding

CHANGING

rc = rc

file_encoding = v_encoding

EXCEPTIONS

cntl_error = 1

error_no_gui = 2

not_supported_by_gui = 3

cannot_initialize_globalstate = 4

OTHERS = 5.

IF sy-subrc <> 0 OR

v_encoding = 0.

CLEAR v_encoding.

ENDIF.

CHECK v_encoding IS NOT INITIAL.

* Attribute for UTF-8 format

v_xsrting = cl_abap_char_utilities=>byte_order_mark_utf8.

  

*--------- BEGIN OF DELETE S.SAHA 11.03.09 

* Convert XSTRING TO STRING

 

* CALL FUNCTION 'HR_KR_XSTRING_TO_STRING'

* EXPORTING

* from_codepage = v_encoding

* in_xstring = v_xsrting

*IMPORTING

*out_string = v_string.

*IF sy-subrc = 0.

   

*--------- END OF DELETE S.SAHA 11.03.09 

  

* -------------- Using the class CL_ABAP_CONV_IN_CE to convert from XSTRING to STRING - Suhas Saha 11.03.09

DATA: v_conv TYPE REF TO cl_abap_conv_in_ce.

 * Create a Conversion Instance

v_conv = cl_abap_conv_in_ce=>create(

encoding = v_encoding

input = v_xsrting ).

 v_conv->read( IMPORTING data = v_string ).

* -------------- Using the class CL_ABAP_CONV_IN_CE to convert from XSTRING to STRING - Suhas Saha 11.03.09

  

LOOP AT it_mara INTO wa_mara.

IF sy-tabix = 1.

* To download a file in UTF-8 add the contents of BOM

* UTF8 infront of the first record.

CONCATENATE v_string wa_mara INTO wa_string-data.

APPEND wa_string TO it_string.

ELSE.

MOVE wa_mara TO wa_string-data.

APPEND wa_string TO it_string.

ENDIF.

ENDLOOP.

ENDIF.

* Download the file

CALL METHOD cl_gui_frontend_services=>gui_download

EXPORTING

filename = 'C:\Documents and Settings\ssaha\Desktop\utf.txt'

codepage = v_encoding

CHANGING

data_tab = it_string

EXCEPTIONS

file_write_error = 1

no_batch = 2

gui_refuse_filetransfer = 3

invalid_type = 4

no_authority = 5

unknown_error = 6

header_not_allowed = 7

separator_not_allowed = 8

filesize_not_allowed = 9

header_too_long = 10

dp_error_create = 11

dp_error_send = 12

dp_error_write = 13

unknown_dp_error = 14

access_denied = 15

dp_out_of_memory = 16

disk_full = 17

dp_timeout = 18

file_not_found = 19

dataprovider_exception = 20

control_flush_error = 21

not_supported_by_gui = 22

error_no_gui = 23

OTHERS = 24.

IF sy-subrc = 0.

WRITE: /'File downloaded successfully !!!'.

ENDIF.

在Node.js中,可以使用iconv-lite库来处理UTF-8编码。iconv-lite是一个纯JS实现的库,支持多种编码格式,包括UTF-8。 下面是一个从GBK文件读取内容,然后将编码转存为UTF-8编码的例子: ``` var buffer = Buffer.from(fs.readFileSync('gbkFile.txt',{encoding:'binary'}),'binary'); console.log(buffer);//得到文件内容对应的Buffer var text = iconv.decode(buffer,'GBK');//使用GBK解码 console.log(text); fs.writeFileSync('utfFile.txt',iconv.encode(text, 'utf8'),'binary'); //按二进制方式写入 fs.writeFileSync('utfFile2.txt',text,'utf8'); //按UTF8写入。 ``` 这个例子首先使用fs.readFileSync方法读取GBK编码的文件,并将其保存为二进制的Buffer。然后使用iconv.decode方法将Buffer解码为GBK编码的文本。接下来,使用fs.writeFileSync方法将解码后的文本按照UTF-8编码保存为二进制文件utfFile.txt,以及按照UTF-8编码保存为UTF-8文本文件utfFile2.txt。 需要注意的是,Unicode标准允许在UTF-8中使用BOM(字节顺序标记),但一般不建议使用它。在使用Node.js处理UTF-8编码时,通常不需要使用BOM。 <span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [Node.js环境中使用GBK编码](https://blog.youkuaiyun.com/violentbomb/article/details/52919206)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *3* [gulp-bom:将UTF-8 BOM添加到文件](https://download.youkuaiyun.com/download/weixin_42134338/19080088)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ChampaignWolf

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值