項目出了問題,由於AscII非打印字符的緣由,後來找了一下啊ASCII的非打印字符,總共有31個,而後咱們直接所有替換成問號了.app
解決方式爲先找到非打印字符,這是我從網上找的非打印字符表:函數
進制 | 十六進制 | 字符 | 十進制 | 十六進制 | 字符 | |
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 | 單元分隔符 |
當碰到這樣的打印字符的時候,替換成問號?spa
程序爲:.net
博客地址:http://blog.csdn.net/dlxuemin/article/details/1576975code
知道了他們的ascII碼以後,能夠將原先在字符串中的非打印字符用問號?過濾 blog
函數爲字符串
// 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)博客
在這個循環體中,有一個string
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 |