我用来跑
$s =~ s/[^[:print:]]//g;
Run Code Online (Sandbox Code Playgroud)
在Perl上摆脱不可打印的字符.
在Python中没有POSIX正则表达式类,我不能写[:print:]让它意味着我想要的东西.我知道在Python中无法检测字符是否可打印.
你会怎么做?
编辑:它也必须支持Unicode字符.string.printable方式很乐意将它们从输出中剥离出来.对于任何unicode字符,curses.ascii.isprint都将返回false.
我有一个带有一些不可打印字符的文件,它们显示为^ C或^ B,我想找到并替换这些字符,我该怎么做呢?
如何删除图片1中显示为蓝色的特殊字符,如:^ M,^ A,^ @,^ [.根据我的理解,^ M是一个Windows换行符,我可以
sed -i '/^M//g'
用来删除它,但它不能删除其他人.该命令dos2unix
也不起作用.是否有任何方法可以用来删除它们?
是否可以在JavaScript中检测二进制数据?
我希望能够检测二进制数据并将其转换为十六进制以便于阅读/调试.
经过更多调查后,我意识到检测二进制数据不是正确的问题,因为二进制数据可以包含常规字符和不可打印的字符.
Outis的问题和答案(/ [\ x00-\x1F] /)是我们在尝试检测二进制字符时所能做的最好的事情.
注意:您必须从ascii字符串序列中删除换行符和可能的其他字符,以使检查实际工作.
这是一个非常奇怪的问题.我几乎整天都把它简化为一个小的可执行脚本,完全展示了这个问题.
问题摘要:我正在使用XML :: Twig从XML文件中提取数据片段,然后我将该数据片段放在另一段数据的中间,让我们将其称为父数据.当我开始时,父数据在其开头具有这种奇怪的不可打印字符.它是供应商提供的数据,所以我无法控制它.我的问题是,在我将数据片段粘贴到父数据的中间之后,最终产品除了最初开始的字符之外还有一个新的非可打印字符.这个新的不可打印字符不在父数据中,也不在子数据片段中.我不知道它来自何处,也不知道它是如何进入我的数据的.
我怀疑它是一个XML :: Twig错误,因为在while循环中从文件句柄读取一行时发生字符串损坏,但是当我删除XML :: Twig代码时,我一直没有成功地重新创建我的问题我的脚本所以我不得不留下它.
这是我第一次体验我正在尝试处理的字符串中的不可打印字符.我需要做一些特别的事情而不是像普通的字符串那样对待它们吗?
我在Windows XP上使用ActiveState Perl 5.10.1和XML :: Twig 3.32(最新)和Eclipse 3.5.1 IDE.
这是一个演示问题的脚本:
use strict;
use warnings;
use XML::Twig;
my $FALSE = 0;
my $TRUE = 1;
my $name = 'KurtsProgram';
my $task = 'MainTask';
my $hidden_char = "\xBF";
my $data = $hidden_char .
'(*********************************************
Data-File-Header-Junk
**********************************************)
PROGRAM MainProgram ()
END_PROGRAM
TASK SecondaryTask ()
END_TASK
TASK MainTask ()
MainProgram;
END_TASK
';
my $new_data = insertProgram( $name, $task, $data …
Run Code Online (Sandbox Code Playgroud) 例如我有一个这样的字符串:abc123[*]xyz[#]098[~]f9e
[*] 、 [#] 和 [~] 代表 3 个不同的不可打印字符。如何在 Java 中用“X”替换它们?
坦率
我想将包含不可打印字符的字节数组转换为我的应用程序的字符串.当我转换回字节数组时,数组的内容应该保持相同,我发现ASCII/Unicode/UTF8总是给我正确的解决方案?
例如
byte[] bytearray ={ 147, 35, 44, 18, 255, 104, 206, 72 ,69};
string str = System.Text.Encoding.ASCII.GetString(bytearray);
bytearray = System.Text.Encoding.ASCII.GetBytes(str);
Run Code Online (Sandbox Code Playgroud)
在上面的例子中,我发现字节数组包含
{ 63, 35, 44, 18, 63, 104, 63, 72 ,69}.
Run Code Online (Sandbox Code Playgroud)
请帮助我.
Grepping不可打印的字符似乎不适用于回车(控制键^ M).
usr@R923047 ~
$ head -3 test.ctl
row 1
row 2
row 3
usr@R923047 ~
$ head -3 test.ctl | cat -nv
1 row 1^M
2 row 2^M
3 row 3
usr@R923047 ~
$ head -3 test.ctl | grep '[^[:print:]]'
usr@R923047 ~
$ head -3 test.ctl | grep '[[:cntrl:]]'
usr@R923047 ~
Run Code Online (Sandbox Code Playgroud) 我写了下面的脚本来测试"可打印字符"字符类,如所描述这里.
#!/bin/sh
case "foo" in
*[:print:]*) echo "found a printable character" ;;
*) echo "found no printable characters" ;;
esac
Run Code Online (Sandbox Code Playgroud)
我希望这个脚本输出found a printable character
,至少有一个(实际上是所有)字符"foo"
是可打印的.相反,它输出"found no printable characters"
.为什么字符"foo"
不被识别为可打印字符?
我有一些供应商数据,其中SOH(ASCII字符1)作为字段分隔符,STX(ASCII字符2)作为记录分隔符.是否可以使用LOAD DATA INFILE加载此数据而无需预先处理文件并将这些字符替换为更常见的字符?
在MySQL中有没有办法在group_concat()中使用不可打印的符号定义SEPERATOR?像ascii 3或类似的东西?
我试过了
group_concat(text SEPERATOR char(3))
Run Code Online (Sandbox Code Playgroud)
和
group_concat(text SEPERATOR 3)
Run Code Online (Sandbox Code Playgroud)
他们俩都行不通.
也许是逃避的方法?
我得到很长的文本,我想确保没有可打印的标志会破坏我的内容.所以我想用不可打印的标志分开它们......
有任何想法吗?
我正在尝试编写一个bash脚本,它查看一个充满文件的目录,并将它们分类为纯文本或二进制文件.如果文件仅包含明文字符,则文件为纯文本,否则为二进制文件.到目前为止,我已经尝试了以下grep的排列:
#!/bin/bash
FILES=`ls`
for i in $FILES
do
########GREP SYNTAX###########
if grep -qv -e[:cntrl:] $i
########/GREP SYNTAX##########
then
mv $i $i-plaintext.txt
else
mv $i $i-binary.txt
fi
done
Run Code Online (Sandbox Code Playgroud)
在grep语法行中,我也试过了没有-v标志并交换if语句的分支,以及它们与[:alnum:]和[:print:]的两种组合.这些变体中的所有六个产生一些标记为二进制的文件,其仅包含plantext和一些标记为明文的文件,其包含至少一个不可打印的字符.
我需要找到一种方法来识别只包含可打印字符的文件,即AZ,az,0-9,标点符号,空格和新行.包含任何不在此集合中的字符的所有文件都应归类为二进制文件.
我一直在砸墙试图将它分类半天.救命!谢谢,Rik