老R3(非Unicode系统),发现读取出来的数据中有编码为0的字符,存文件后发现串行,所以需要先替换

DATA: str TYPE string.
*str = zacct_12-txt+47.
str = '南京人力资源部'.
"C4CFBEA9C8CBC1A6D7CAD4B4B2BF
DATA:c(17).
FIELD-SYMBOLS: <c> TYPE x .
ASSIGN c TO <c> CASTING.
<c> = '00C4CFBEA9C8CB00C1A6D7CAD4B4B2BF00'."在 南京人力资源部 前中后加上了空字符00,方便测试
WRITE:/ c,<c>.
str = c.
PERFORM replace_null USING str.
*&---------------------------------------------------------------------*
*&      Form  replace_null
*&---------------------------------------------------------------------*
*       text R3系统中替换字符串中的空字符(编码为0的)
*----------------------------------------------------------------------*
*      -->P_STR      text
*----------------------------------------------------------------------*
FORM replace_null USING p_str TYPE string.
******************************编
  DATA: xstr TYPE xstring.
  DATA: l_codepage(4) TYPE n .
  DATA: l_encoding(20).
  CALL FUNCTION 'SCP_CODEPAGE_BY_EXTERNAL_NAME'
    EXPORTING
      external_name = 'UTF-16BE'"不管中文还是英文,先统一编码,都转成两字节的
    IMPORTING
      sap_codepage  = l_codepage.
  l_encoding = l_codepage.
  DATA: convout TYPE REF TO cl_abap_conv_out_ce.
  convout = cl_abap_conv_out_ce=>create( encoding = l_encoding ).
  convout->write( data = p_str ).
  xstr =  convout->get_buffer( ).
******************************替
  DATA:truc_str TYPE string,
       str_len TYPE i.
  truc_str = xstr.
  str_len = STRLEN( truc_str ).
  str_len = str_len / 4 .
  DATA: cnt TYPE i.
  DATA: c4(4) .
  DATA: x2(2) TYPE x.
  DATA: i TYPE i.
  DATA: xstr2 TYPE xstring.
  DATA: off_index TYPE i.
  DO str_len TIMES.
    off_index = cnt * 4.
    c4 = truc_str+off_index(4).
    x2 = c4.
    i = x2.
    IF i = 0."如果发现是空字符,使用空格替换
      x2 = '0020'.
      CONCATENATE xstr2 x2 INTO xstr2 IN BYTE MODE.
    ELSE.
      CONCATENATE xstr2 x2 INTO xstr2 IN BYTE MODE.
    ENDIF.
    WRITE: / c4,x2,i,xstr2.
    cnt = cnt + 1.
  ENDDO.
******************************解
  DATA: convin TYPE REF TO cl_abap_conv_in_ce.
  convin = cl_abap_conv_in_ce=>create( encoding = l_encoding input = xstr2 ).
  DATA: str TYPE string.
  CALL METHOD convin->read
    IMPORTING
      data = p_str.
  WRITE: / p_str.
ENDFORM.                    "replace_null

替换空字符NULL(字符编码为0的字符)的更多相关文章

  1. Swift3.0语言教程删除字符与处理字符编码

    Swift3.0语言教程删除字符与处理字符编码 Swift3.0语言教程删除字符 Swift3.0语言教程删除字符与处理字符编码,在字符串中,如果开发者有不需要使用的字符,就可以将这些字符删除.在NS ...

  2. [No0000137]字符编码详解

    摘要 本文主要介绍了字符编码的基础知识,以及常见的字符编码类型,比如ASCII,Unicode,UTF-8,ISO 8859等,以及各种编码之间的关系,同时专门解释了中文字符相关的编码标准,包括GB2 ...

  3. 转1:Python字符编码详解

    Python27字符编码详解 声明 一 字符编码基础 1 抽象字符清单ACR 2 已编码字符集CCS 3 字符编码格式CEF 31 ASCII初创 311 ASCII 312 EASCII 32 MB ...

  4. .NET Framework 中的字符编码

    字符是可用多种不同方式表示的抽象实体. 字符编码是一种为受支持字符集中的每个字符进行配对的系统,配对时使用的是表示该字符的某些值. 例如,摩尔斯电码是一种为罗马字母表中的每个字符进行配对的字符编码,配 ...

  5. Python2.7字符编码详解

    目录 Python2.7字符编码详解 声明 一. 字符编码基础 1.1 抽象字符清单(ACR) 1.2 已编码字符集(CCS) 1.3 字符编码格式(CEF) 1.3.1 ASCII(初创) 1.3. ...

  6. 第2章 Python基础-字符编码&数据类型 字符编码&字符串 练习题

    1.简述位.字节的关系 位(bit)是计算机中最小的表示单元,数据传输是以“位”为单位的,1bit缩写为1b 字节(Byte)是计算机中最小的存储单位,1Byte缩写为1B 8bit = 1Byte ...

  7. C++ tinyXML的使用和字符编码转换

    转载:http://jetyi.blog.51cto.com/1460128/761708/ 关于tinyxml使用的文档有很多(这篇文章就写的很好),这里仅提一下字符编码的转换问题,如果你不熟悉字符 ...

  8. 那些年java MD5加密字符编码的坑

    相信做过MD5加密的童鞋都遇到过字符编码的坑,一般加密出来的结果和其他人不一样都是字符编码不一致导致的,比如类文件的字符编码.浏览器的字符编码等和对方不一致,所以就需要转码统一字符. 以下是笔者转码过 ...

  9. [转]字符集、字符编码、XML中的中文编码

    字符集.字符编码.XML中的中文编码 作为程序员的你是不是对于ASCII .UNICODE.GB2321.UTF-7.UTF-8等等不时出现在你面前的这些有着奇怪意义的词感到很讨厌呢,是不是总觉得好象 ...

随机推荐

  1. 系统环境变量(就是不需要切换目录,敲击“python”就可以进入编码器)

    1.右击我的电脑,选择属性,选择“高级系统设置” 2.选择高级,选择环境变量 3.在系统变量中找到path,点击编辑.然后新建,将python的路径复制进去,点击确定.

  2. .net core跨平台的文件路径

    windows下路径为:"xxxx\\yyyy" linux路径下为:"xxxx/yyyy" 用Path.Combine("xxxx",&q ...

  3. (转)thymeleaf中的判断总结

    判断String字符串,添加引号 th:class="${flag=='forum.html'}?'active'" 判断boolean类型,注意不能当成字符串处理,不能添加引号 ...

  4. 大家的备忘录——xpage_在同一页面展开文档显示该文档详细信息(可显示处理过的Rich Text)

    Xpage大纲: 解析: 1.通过[link2]点击触发jQuery事件来展开[面板:thispanel] 2.[面板:thispanel]写了onClientLoad事件:让thispanel隐藏. ...

  5. Gym 102091K The Stream of Corning 2【线段树】

    <题目链接> 题目大意: 进行两种操作:1.给定一个数的出现时间.价值.消失时间: 2.进行一次询问,问你当前时间,第K大的数的价值. 解题分析: 采用离线集中处理,将每个数的出现时间和它 ...

  6. 2018ddctf wp

    杂项 第一题:颜文字 看过以后开始没思路:后来有师傅说是十六进制 我就上网百度了一下http://tieba.baidu.com/p/3717777553 但是不可能是完全十六进制啊,毕竟出题人很羞涩 ...

  7. 366. Fibonacci

    描述 查找斐波纳契数列中第 N 个数. 所谓的斐波纳契数列是指: 前2个数是 0 和 1 . 第 i 个数是第 i-1 个数和第i-2 个数的和. 斐波纳契数列的前10个数字是: 0, 1, 1, 2 ...

  8. VC6.0学习C语言入门SDK

    度网盘链接 VC6.0    密码:t6bd VS2010 密码:3of2 C语言入门教程 在线视频地址(PS此链接摘抄至博主lellansin) Acfun.tv:http://www.acfun. ...

  9. C#基础用户登陆

    1.主界面代码: 2.注册页面 3.登陆界面 登陆注册代码: //编写登录界面逻辑 using System; using System.Collections.Generic; using Syst ...

  10. Macbook Pro安装Office 2016 for mac

    折腾了半天终于弄好了…… 工具:office2016安装包,MSO15.11.2Patch(破解脚本),Xcode office2016安装包百度网盘下载:http://pan.baidu.com/s ...