【问题标题】:How to handle trademark character ™ in Perl如何在 Perl 中处理商标字符™
【发布时间】:2014-01-17 19:58:58
【问题描述】:

我正在使用 Perl 从 SQLite 数据库中获取数据,并使用 WWW:Mechanize 模块进行网络抓取。

我发布的数据(在数据库中)有一些 字符,在查看网站上的文本后,它有几个奇怪的字符:â¢,而不是

我在 Perl 程序的顶部设置了以下内容。我用它来防止终端出现关于“宽字符”的警告。

binmode(STDOUT, ":utf-8");

我对编码/解码字符知之甚少,因此任何帮助都会很有用。

编辑:在阅读了Perl IO 之后,我找到了解决我问题的stackoverflow answer

【问题讨论】:

    标签: perl encoding character-encoding


    【解决方案1】:

    解码输入,编码输出。

    use open ':std', ':encoding(UTF-8)';  # Outputs are UTF-8
    BEGIN { binmode STDIN; }              # ...but not the raw CGI request.
    
    use CGI qw( -utf8 );                  # Decode parameters
    use DBI qw( );
    
    {
       my $cgi = CGI->new();
       print $cgi->header(
          -type    => "text/plain",  # Just cause it's shorter.
          -charset => "UTF-8",       # Tell browser encoding used.
       );
    
       my $dbh = DBI->connect(
          "dbi:SQLite:dbname=/tmp/tmp.sqlite", "", "",
          {
             AutoCommit     => 1,
             RaiseError     => 1,
             PrintError     => 0,
             PrintWarn      => 1,
             sqlite_unicode => 1,   # Encode and decode for us.
          },
       );
    
       $dbh->do("CREATE TABLE Testing ( str TEXT )");
    

       my $from_html_parser = "\x{2122}";
    
       # Should be 2122, since the trademark symbol is U+2122.
       printf("from_html_parser = %v04X\n", $from_html_parser);
    
       print("$from_html_parser\n");
    
       $dbh->do("INSERT INTO Testing VALUES (?)", undef, $from_html_parser);
    

       my $from_database = $dbh->selectrow_array("SELECT * FROM Testing");
    
       # Should be 2122, since the trademark symbol is U+2122.
       printf("from_database = %v04X\n", $from_database);
    
       print("$from_database\n");
    }
    
    END { unlink("/tmp/tmp.sqlite"); }
    

    【讨论】:

      【解决方案2】:

      这些文档帮助了我:Perl IO

      然后,通过几次 Google 搜索,我找到了这个 stackoverflow answer,它解决了我的问题。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-03-14
        • 2018-10-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-10-25
        • 2015-06-14
        • 2013-03-19
        相关资源
        最近更新 更多