问题 - 我有一个字符串,说Buna$002C_TexasBuna$002C_Texas'然后在哪里$跟随Unicode.我想用它们各自的Unicode字符表示替换这些Unicode.
在Perl中,如果任何Unicode的形式为" \x{002C}那么它将被转换为它各自的Unicode字符.下面是示例代码.
#!/usr/bin/perl
my $string = "Hello \x{263A}!\n";
@arr= split //,$string;
print "@arr";
Run Code Online (Sandbox Code Playgroud)
我正在处理一个包含1000万条记录的文件.所以我在标量变量中有这些字符串.要做到上面一样,我代$4_digit_unicode到\x{4_digit_unicode}下面.
$str = 'Buna$002C_TexasBuna$002C_Texas';
$str =~s/\$(.{4})/\\x\{$1\}/g;
$str = "$str"
Run Code Online (Sandbox Code Playgroud)
它给了我
Buna\x{002C}_TexasBuna\x{002C}_Texas
Run Code Online (Sandbox Code Playgroud)
这是因为at $str = "$str",line $str被插值,但不是它的值.所以\x{002C}不是Perl插值的.
有没有办法强制Perl,以便它也插入内容$str?
要么
还有另一种方法可以实现吗?我不想取出每个Unicodes,然后使用pack "U4",0x002C它然后替换它.但是在一行中的某些事情(如下面的不成功尝试)是可以的.
$str =~ s/\$(.{4})/pack("U4",$1)/g;
Run Code Online (Sandbox Code Playgroud)
我知道上面的错误; 但我可以做上面这样的事吗?
对于输入字符串$str = 'Buna$002C_TexasBuna$002C_Texas',所需的输出是Buna,_TexasBuna,_Texas.
我无法理解,如果我取消注释返回行,那么输出将是"CODE",否则"SCALAR"..为什么会这样?
use strict;
sub test {
my ($abc,$grab) = @_;
print 'i m here';
print $abc;
## return []; if uncommented then output will be "REF" else "SCALAR"
}
my $pass= "i m good";
my %my_hash = ();
$my_hash{'fun'} = \&test($pass);
print ref($my_hash{'fun'})
Run Code Online (Sandbox Code Playgroud) 我需要从一组字符中选择随机字符,例如0..9,az,Az等.为此,我需要使用Perl脚本生成0-n(n是不同字符数)之间的随机整数.但Perl rand功能不具有加密安全性.生成随机数的最佳方法是什么.
现在我正在使用自己的算法,我随机选择了字符串.然后我使用rand生成一个随机数.使用它我在随机数字组中选择一个十进制数.然后将它与随机数相乘.无论我得到的是所选字符的索引.
my @chars = ('a'..'d','#','N'..'Z','$','e'..'f','0'..'9');
my @random_numbers_list = ('1.0145','1.3464','1.8453','1.5145','1.9994');
my $random_string;
my $random_number;
my $chars_length = scalar @chars;
foreach (1 .. $length) {
$random_number = (rand $chars_length)*$random_numbers_list[rand(5)];
$random_number = ($random_number>$chars_length)?$random_number-$chars_length:$random_number;
$random_string .= $chars[$random_number];
}
print $random_string;
Run Code Online (Sandbox Code Playgroud)
我知道我不断增加random_numbers_list的大小,它会越来越安全.但我仍然不确定这是实现这一目标的最佳方式.
请让我知道生成加密安全随机字符串/数字的最佳方法.
谢谢
我有下面的基类
class FileUtil:
def __init__(self):
self.outFileDir = os.path.join(settings.MEDIA_ROOT,'processed')
if not os.path.exists(outFileDir):
os.makedirs(outFileDir)
## other methods of the class
Run Code Online (Sandbox Code Playgroud)
我在扩展这个类,如下所示:
class Myfile(FileUtil):
def __init__(self, extension):
super(Myfile, self).__init__()
self.extension = 'text'
## other methods of class
Run Code Online (Sandbox Code Playgroud)
但是我遇到错误了吗?
super(Myfile, self).__init__()
TypeError: super() takes at least 1 argument (0 given)
Run Code Online (Sandbox Code Playgroud)
我浏览了许多文档,发现在2.x和3.x中调用super()有不同的方式。我尝试了两种方式,但都出错了。
问题陈述 -我正在处理一些数据文件.在该数据转储中,我有一些包含字符的unicode值的字符串.字符可以是大写和小写.现在我需要对此字符串进行以下处理.
1-如果有任何 - ,_)(} {] ['"然后删除它们.所有这些字符都以Unicode形式出现在字符串中($ 4-hexa-digits)
2-所有大写字符都需要转换为小写字母(包括所有不同的unicode字符'Φ' - >'φ','Ω' - >'ω','Ž' - >'ž')
3-稍后我将使用此最终字符串来匹配不同的用户输入.
问题详细说明 -我有一些字符串Buna$002C_Texas , Zamboanga_$0028province$0029和更多.
这里$002C, $0028和$0029是Unicode值,我用下面把它们转换成自己的字符表示.
$str =~s/\$(....)/chr(hex($1))/eg;
Run Code Online (Sandbox Code Playgroud)
要么
$str =~s/\$(....)/pack 'U4', $1/eg;
Run Code Online (Sandbox Code Playgroud)
现在我按照我的要求替换所有角色.然后我将字符串解码为utf-8以获得所有字符的小写,包括unicode,如下所示,lc直接不支持unicode字符.
$str =~ s/(^\-|\-$|^\_|\_$)//g;
$str =~ s/[\-\_,]/ /g;
$str =~ s/[\(\)\"\'\.]|?|’|‘//g;
$str =~ s/^\s+|\s+$//g;
$str =~ s/\s+/ /g;
$str = decode('utf-8',$str);
$str = lc($str);
$str = encode('utf-8',$str);
Run Code Online (Sandbox Code Playgroud)
但是当Perl尝试解码字符串时,我遇到了错误.
Cannot decode string with wide characters at /usr/lib64/perl5/5.8.8/x86_64-linux-thread-multi/Encode.pm line 173
如此处所述,此错误也很明显.@ http://www.perlmonks.org/?node_id=569402
现在我按照上面的url改变了我的逻辑.我使用下面的方法将unicode转换为字符表示.
$str =~s/\$(..)(..)/chr(hex($1)).chr(hex($2))/eg; …