小编vir*_*rus的帖子

将字符串中的多个Unicode转换为字符

问题 - 我有一个字符串,说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.

regex string unicode perl

2
推荐指数
1
解决办法
318
查看次数

为什么函数的引用作为SCALAR返回

我无法理解,如果我取消注释返回行,那么输出将是"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)

perl

2
推荐指数
2
解决办法
47
查看次数

在perl中生成加密安全的随机数/字符串

我需要从一组字符中选择随机字符,例如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的大小,它会越来越安全.但我仍然不确定这是实现这一目标的最佳方式.

请让我知道生成加密安全随机字符串/数字的最佳方法.

谢谢

perl perl-module mod-perl

1
推荐指数
1
解决办法
1839
查看次数

python 2.7-如何调用父类构造函数

我有下面的基类

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()有不同的方式。我尝试了两种方式,但都出错了。

python python-2.7

1
推荐指数
1
解决办法
3983
查看次数

将带有unicode字符的字符串转换为小写字母

问题陈述 -我正在处理一些数据文件.在该数据转储中,我有一些包含字符的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; …

regex unicode perl

0
推荐指数
1
解决办法
795
查看次数

标签 统计

perl ×4

regex ×2

unicode ×2

mod-perl ×1

perl-module ×1

python ×1

python-2.7 ×1

string ×1