老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模块安装查看、包制作

    一. 模块安装 ubuntu : apt-get install python-pip redhat: yum install python-pip pip install 模块 pip instal ...

  2. P1441 砝码称重 DFS回溯+DP

    题目描述 现有n个砝码,重量分别为a1,a2,a3,……,an,在去掉m个砝码后,问最多能称量出多少不同的重量(不包括0). 请注意,砝码只能放在其中一边. 输入输出格式 输入格式: 输入文件weig ...

  3. L3-007 天梯地图 (30 分) dijkstra

    本题要求你实现一个天梯赛专属在线地图,队员输入自己学校所在地和赛场地点后,该地图应该推荐两条路线:一条是最快到达路线:一条是最短距离的路线.题目保证对任意的查询请求,地图上都至少存在一条可达路线. 输 ...

  4. 用sql的avg(score)求完平均值后,保存两位小数的方法(用于查询或视图)

    查jx_score表的平均值,以哪次考试(testid)和科目分组(courseid) select testid, courseid, round(avg(`jx_score`.`score`),2 ...

  5. Java 之 Web前端(一)

    1.http a.定义:超文本传输协议 b.作用:web服务器与web浏览器之间通信 c.步骤: ①客户端与web服务器建立连接(IP地址与端口号) ②客户端发送http请求(请求资源路径) ③服务器 ...

  6. linux 服务器安装 nginx

    每次安装 nginx 都在网上找教程,这次特意记录一下安装过程. 第一步:安装依赖 一键安装依赖 yum -y install gcc zlib zlib-devel pcre-devel opens ...

  7. log4j平稳升级到log4j2

    一.前言 公司中的项目虽然已经用了很多的新技术了,但是日志的底层框架还是log4j,个人还是不喜欢用这个的.最近项目再生产环境上由于log4j引起了一场血案,于是决定升级到log4j2. 二.现象 虽 ...

  8. C# 使用 Proxy 代理请求资源

    C# 使用 Proxy 请求资源,基于 HttpWebRequest 类 前言 这是上周在开发 C# 中使用 Proxy 代理时开发的一些思考和实践.主要需求是这样的,用户可以配置每次请求是否需要代理 ...

  9. C# 简单学习正则表达式

    第一步先要引入有关正则式的命名空间: using System.Text.RegularExpressions;            第二步用指定的正则式构建一个正则表达式对象,下面的正则式是用来搜 ...

  10. SpringBoot应用War包形式部署到外部Tomcat

    这一篇文章介绍SpringBoot应用修改默认打jar形式部署为打war包形式,部署到外部Tomcat. SpringBoot应用默认打包成为可执行jar模式让我们感觉到部署的便捷,接下来给大家介绍一 ...