ASCII 非打印字符
项目出了问题,因为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 非打印字符的更多相关文章
- ASCII 可打印字符与控制字符
2017-08-16 21:29:30 基本的 ASCII 字符集共有 128 个字符,其中有 95 个可打印字符,包括常用的字母.数字.标点符号等,另外还有 33 个控制字符.标准 ASCII 码使 ...
- ascii码所有字符对照表(包含汉字和外国文字)
http://www.0xaa55.com/thread-398-1-1.html看到了0xaa55的这个帖子,想起了2年前我在51cto发的一个帖子http://down.51cto.com/dat ...
- 微信公众号API返回不可打印字符的处理。
引言 在使用微信公众号的"批量获取用户基本信息"API时,发现在某些时候不能使用php的json_decode转为数组,打印出curl获取到的内容中,发现了几个不可打印字符.相信不 ...
- Base64就是一种 基于64个可打印字符来表示二进制数据的表示方法
Base64编码是从二进制到字符的过程. Base64编码主要用在传输.存储.表示二进制等领域,还可以用来加密,但是这种加密比较简单. byte[] byteArray = Encoding.UTF8 ...
- strings - 显示文件中的可打印字符
总览 (SYNOPSIS) strings [-a|-|--all] [-f|--print-file-name] [-o] [--help] [-v|--version] [-n min-len|- ...
- 为什么乱码:<meta http-equiv="content-type">前的非ANSI字符
为什么乱码:<meta http-equiv="content-type">前的非ANSI字符 浏览器检测网页字符集的默认顺序 浏览器的网页字符集检测顺序通常是: ch ...
- Linux c字符串中不可打印字符转换成16进制
本文由 www.169it.com 搜集整理 如果一个C字符串中同时包含可打印和不可打印的字符,如果想将这个字符串写入文件,同时方便打开文件查看或者在控制台中打印出来不会出现乱码,那么可以将字符串中的 ...
- Base64 报错 的解决办法 (Base-64 字符数组或字符串的长度无效。, 输入的不是有效的 Base-64 字符串,因为它包含非 Base-64 字符、两个以上的填充字符,或者填充字符间包含非法字符。)
Base64 报错 的解决办法, 报错如下:1. FormatException: The input is not a valid Base-64 string as it contains a n ...
- 注册许可证出现“输入的不是有效的 Base-64 字符串,因为它包含非 Base-64 字符、两个以上的填充字符,或者填充字符间包含非空白字符”
问题描述: 引入失败!输入的不是有效的 Base-64 字符串,因为它包含非 Base-64 字符.两个以上的填充字符,或者填充字符间包含非空白字符 解决方案: 去注册cloud7.0的产品,重新引入 ...
随机推荐
- net-snmp配置:snmp v3的安全配置
net-snmp配置:snmp v3的安全配置 net-snmp配置:snmp v3的安全配置 增加snmp v3用户 增加 认证且加密只读账号(authPriv) 增加 认证且加密的读写账户 增加 ...
- 搭建高可用mongodb集群(四)—— 分片
按照上一节中<搭建高可用mongodb集群(三)-- 深入副本集>搭建后还有两个问题没有解决: 从节点每个上面的数据都是对数据库全量拷贝,从节点压力会不会过大? 数据压力大到机器支撑不了的 ...
- ccs3中icon转换为字体的方法
小图标转换为字体有几大优点 文件小,一般50k以内 避免了加载多个icons,减少了加载次数,有利于页面优化. 兼容性很好,可以随便放大缩小,都能正常显示. 维护起来也很简单,只用找到这个字体文件(比 ...
- 二分图------》Hopcroft-Karp算法 hdu2389
Hopcroft-Karp算法 该算法由John.E.Hopcroft和Richard M.Karp于1973提出,故称Hopcroft-Karp算法. 原理 为了降低时间复杂度,可以在增广匹配集合M ...
- Ubuntu 16.04播放器Rhythmbox乱码解决
使用Rhythmbox进行音乐播放的时候,歌曲名称专辑歌手名称都出现乱码,查看了网上很多教程,要不就是将音频转码,要不就是修改用户环境编码配置.前一种方法对音频有改动,后一种可能无效还有可能会影响系统 ...
- ThinkPHP在Ubuntu上 : mkdir的使用
问题: 环境:Ubuntu系统,xampp1.8.3-5建站工具 描述:以root的身份运行.Apache的 DocumentRoot = "/var/www" .thinkphp ...
- php之aop实践
aop简介 AOP为Aspect Oriented Programming的缩写,意为:面向切面编程(也叫面向方面),可以通过预编译方式和运行期动态代理实现在不修改源代码的情况下给程序动态统一添加功能 ...
- 【Java】Java 深入探讨 单例模式的实现
在GoF的23种设计模式中,单例模式是比较简单的一种.然而,有时候越是简单的东西越容易出现问题.下面就单例设计模式详细的探讨一下. 所谓单例模式,简单来说,就是在整个应用中保证只有一个类的实例存在 ...
- Portal
https://chenliang0571.wordpress.com/2013/12/08/openwrt-wifidog-wifi-hotspots/http://www.h3c.com.cn/M ...
- iOS 目录的使用
Table 1-1 Commonly used directories of an iOS app Directory Description AppName.app This is the ap ...