项目出了问题,因为AscII非打印字符的原因,后来找了一下啊ASCII的非打印字符,总共有31个,然后我们直接全部替换成问号了.

解决方式为先找到非打印字符,这是我从网上找的非打印字符表:

进制 十六进制 字符   十进制 十六进制 字符
0 00   16 10 数据链路转意
1 01 头标开始   17 11 设备控制 1
2 02 正文开始   18 12 设备控制 2
3 03 正文结束   19 13 设备控制 3
4 04 传输结束   20 14 设备控制 4
5 05 查询   21 15 反确认
6 06 确认   22 16 同步空闲
7 07 震铃   23 17 传输块结束
8 08 backspace   24 18 取消
9 09 水平制表符   25 19 媒体结束
10 0A 换行/新行   26 1A 替换
11 0B 竖直制表符   27 1B 转意
12 0C 换页/新页   28 1C 文件分隔符
13 0D 回车   29 1D 组分隔符
14 0E 移出   30 1E 记录分隔符
15 0F 移入   31 1F 单元分隔符

当碰到这样的打印字符的时候,替换成问号?

程序为:

博客地址:http://blog.csdn.net/dlxuemin/article/details/1576975

知道了他们的ascII码之后,可以将原先在字符串中的非打印字符用问号?过滤

函数为

// yyy.cpp : Defines the entry point for the console application.
// #include "stdafx.h"
#include <stdio.h>
#include<stdlib.h>
#include <string.h>
#include <malloc.h>
#define MAX_MESSAGE_LENGTH 1000
char matchStr1[]="111,aaa,ddd";
static char * NoPrinttoQuestionMark(char *src)
{
char *p = src;
char dest[MAX_MESSAGE_LENGTH + 1024];
memset(dest,0,sizeof(dest));
char *q = dest;
int dst_len = sizeof (dest);
while(0 != *p && dst_len > 2)
{
if(*p >0x1F)
{
*q++ = *p++;
} else {
*q++ = '?';
p++;
}
dst_len--;
}
*q = 0;
return dest;
} int main(int argc, char* argv[])
{ char * abc="333 333 aaa aaa ddd 444 aaa 666";
printf("--原先--\n%s,size=%d\n",abc,strlen(abc)); abc=NoPrinttoQuestionMark(abc);
printf("--替换完之后--\n%s,size=%d\n",abc,strlen(abc));
return 0;
}

当然 看到这段代码之后我们发现两个问题

(1):while(0 != *p && dst_len > 1)

在这个循环体中,有一个

if(*p >0x1F) 假如我们希望,将制表符,回车,换行,单元分割符过滤掉的话,应当改成:

   if(*p >=0x1F|| *p == 0x0a||*p==0x0D||*p==0x09)
(2) dst_len > 2 的原因是说 C 语言规定最后一个字符一定是'\0' 最后一个不用替换的,倒数第二个假如替换的话,要++,这样就超出了限制,直接不替换了.

 

ASCII 打印字符表

十进制 十六进制 字符   十进制 十六进制 字符
32 20 space   80 50 P
33 21 !   81 51 Q
34 22 "   82 52 R
35 23 #   83 53 S
36 24 $   84 54 T
37 25 %   85 55 U
38 26 &   86 56 V
39 27 '   87 57 w
40 28 (   88 58 X
41 29 )   89 59 Y
42 2A *   90 5A Z
43 2B +   91 5B [
44 2C ,   92 5C /
45 2D -   93 5D ]
46 2E .   94 5E ^
47 2F /   95 5F _
48 30 0   96 60 `
49 31 1   97 61 a
50 32 2   98 62 b
51 33 3   99 63 c
52 34 4   100 64 d
53 35 5   101 65 e
54 36 6   102 66 f
55 37 7   103 67 g
56 38 8   104 68 h
57 39 9   105 69 i
58 3A :   106 6A j
59 3B ;   107 6B k
60 3C <   108 6C l
61 3D =   109 6D m
62 3E >   110 6E n
63 3F ?   111 6F o
64 40 @   112 70 p
65 41 A   113 71 q
66 42 B   114 72 r
67 43 C   115 73 s
68 44 D   116 74 t
69 45 E   117 75 u
70 46 F   118 76 v
71 47 G   119 77 w
72 48 H   120 78 x
73 49 I   121 79 y
74 4A J   122 7A z
75 4B K   123 7B {
76 4C L   124 7C |
77 4D M   125 7D }
78 4E N   126 7E ~
79 4F O   127 7F DEL
												

ASCII 非打印字符的更多相关文章

  1. ASCII 可打印字符与控制字符

    2017-08-16 21:29:30 基本的 ASCII 字符集共有 128 个字符,其中有 95 个可打印字符,包括常用的字母.数字.标点符号等,另外还有 33 个控制字符.标准 ASCII 码使 ...

  2. ascii码所有字符对照表(包含汉字和外国文字)

    http://www.0xaa55.com/thread-398-1-1.html看到了0xaa55的这个帖子,想起了2年前我在51cto发的一个帖子http://down.51cto.com/dat ...

  3. 微信公众号API返回不可打印字符的处理。

    引言 在使用微信公众号的"批量获取用户基本信息"API时,发现在某些时候不能使用php的json_decode转为数组,打印出curl获取到的内容中,发现了几个不可打印字符.相信不 ...

  4. Base64就是一种 基于64个可打印字符来表示二进制数据的表示方法

    Base64编码是从二进制到字符的过程. Base64编码主要用在传输.存储.表示二进制等领域,还可以用来加密,但是这种加密比较简单. byte[] byteArray = Encoding.UTF8 ...

  5. strings - 显示文件中的可打印字符

    总览 (SYNOPSIS) strings [-a|-|--all] [-f|--print-file-name] [-o] [--help] [-v|--version] [-n min-len|- ...

  6. 为什么乱码:<meta http-equiv="content-type">前的非ANSI字符

    为什么乱码:<meta http-equiv="content-type">前的非ANSI字符 浏览器检测网页字符集的默认顺序 浏览器的网页字符集检测顺序通常是: ch ...

  7. Linux c字符串中不可打印字符转换成16进制

    本文由 www.169it.com 搜集整理 如果一个C字符串中同时包含可打印和不可打印的字符,如果想将这个字符串写入文件,同时方便打开文件查看或者在控制台中打印出来不会出现乱码,那么可以将字符串中的 ...

  8. Base64 报错 的解决办法 (Base-64 字符数组或字符串的长度无效。, 输入的不是有效的 Base-64 字符串,因为它包含非 Base-64 字符、两个以上的填充字符,或者填充字符间包含非法字符。)

    Base64 报错 的解决办法, 报错如下:1. FormatException: The input is not a valid Base-64 string as it contains a n ...

  9. 注册许可证出现“输入的不是有效的 Base-64 字符串,因为它包含非 Base-64 字符、两个以上的填充字符,或者填充字符间包含非空白字符”

    问题描述: 引入失败!输入的不是有效的 Base-64 字符串,因为它包含非 Base-64 字符.两个以上的填充字符,或者填充字符间包含非空白字符 解决方案: 去注册cloud7.0的产品,重新引入 ...

随机推荐

  1. JAVA操作ORACLE数据库的存储过程

    一.任务提出 JAVA操作oracle11g存储过程实验需要完成以下几个实例: 1.调用没有返回参数的过程(插入记录.更新记录) 2.有返回参数的过程 3.返回列表的过程 4.返回带分页的列表的过程. ...

  2. 【转】MySQL数据类型和常用字段属性总结

    来源:http://www.jb51.net/article/55853.htm 这里先总结数据类型.MySQL中的数据类型大的方面来分,可以分为:日期和时间.数值,以及字符串.下面就分开来进行总结. ...

  3. fontconfig编译出错

    编译fontconfig编译时出错: 出错configure: error: You must have freetype installed; see http://www.freetype.org ...

  4. objc@interface的设计哲学与设计技巧

    blog.sunnyxx.com 我是前言 学习objc时,尤其是先学过其他编程语言再来看objc时,总会对objc的类声明的关键字interface感到有点奇怪,在其它面向对象的语言中通常由clas ...

  5. flask 链接 url_for()

    通常html的文件都放在template里面,那么静态的文件放在哪呢?staitc里面 调用 url_for('static', filename='css/styles.css', _externa ...

  6. UOJ 做题记录

    UOJ 做题记录 其实我这么弱> >根本不会做题呢> > #21. [UR #1]缩进优化 其实想想还是一道非常丝播的题目呢> > 直接对于每个缩进长度统计一遍就好 ...

  7. ASIO插件 真的能提升 音质?(听音乐者必看)

    最近在倒弄HIFI音乐播放器footbar2000的配置时,发现了2011年的一个神贴, 最牛逼的是,这个神贴到现在还屹立不倒,还有很多无知的人在下面膜拜, 我真的想问:你这么优秀,都能逆天反转音质, ...

  8. hadoop MapReduce Yarn运行机制

    原 Hadoop MapReduce 框架的问题 原hadoop的MapReduce框架图 从上图中可以清楚的看出原 MapReduce 程序的流程及设计思路: 首先用户程序 (JobClient) ...

  9. We will be discontinuing the Nitrous Development Platform and Cloud IDE on November 14th, 2016.

    我表示我很难过 Nitrous We will be discontinuing the Nitrous Development Platform and Cloud IDE on November ...

  10. Portal

    https://chenliang0571.wordpress.com/2013/12/08/openwrt-wifidog-wifi-hotspots/http://www.h3c.com.cn/M ...