Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Perl-使用编码方法读取文件?_Perl_File_Encode_Entities - Fatal编程技术网

Perl-使用编码方法读取文件?

Perl-使用编码方法读取文件?,perl,file,encode,entities,Perl,File,Encode,Entities,我不太好,当谈到编码,我想找出如何返回数据,因为它开始与相同的编码 我有一个文件,其中包含一些字符,例如,“»”,当我编辑并插入到数据库中时,这些字符已经变成了» decode_entities()不执行任何操作,而encode_entities再次对字符进行编码。因此,我创建了自己的sub来解决这个问题,但它指出,当从文件中获取数据时,它检索的格式不正确 my $file = "c:/perlscripts/" . md5_hex($md5Con) . "-code.php"; {

我不太好,当谈到编码,我想找出如何返回数据,因为它开始与相同的编码

我有一个文件,其中包含一些字符,例如,
“»”
,当我编辑并插入到数据库中时,这些字符已经变成了»

decode_entities()不执行任何操作,而encode_entities再次对字符进行编码。因此,我创建了自己的sub来解决这个问题,但它指出,当从文件中获取数据时,它检索的格式不正确

my $file = "c:/perlscripts/" . md5_hex($md5Con) . "-code.php";
{
    local( $/ ); # undefine the record seperator
    open FILE, "<", $file or die "Cannot open:$!\n";
    my $fileContents = unicodeConvert(<FILE>);
    ...
    .. 

我怀疑,您的终端的字符集(可以是UTF-8)和perl脚本的源代码(可以在8859-1中的一些字符集感知编辑器中编辑)之间存在差异。如果您确信终端和源代码在同一个字符集中,请尝试使用utf8到脚本头(请参阅)。如果这不起作用,请尝试打印存储到数据库中的数据(增加DBI的调试日志记录)(可能是iRRerevent,因为您不将数据存储为UTF8)。一般来说,尽量提供:

  • 如果您为终端(或服务器使用的系统语言环境,如果您从apache等启动它)执行脚本,则终端的代码页(
    locale
  • 源代码的字符集
  • MySQL连接代码页(是否发布
    设置名称“utf8”
    ?)

  • 此外,对于HTML编码,您可能会发现重用
    HTML::Entities::decode()
    /
    HTML::Entities::encode()
    比自己实现更容易。

    正如您问题的评论中所述,我不确定您到底在问什么

    所以我假设您正在尝试将Unicode字符转换为HTML实体。在这种情况下,使用一个预制模块应该更好。如果由于编码问题(在Perl中非常棘手)而无法正常工作,那么问题的答案是:

    没有像这样的编码选项吗

    open FILE, "<", $file or die "Cannot open:$!\n", "UTF-8";
    
    (示例改编自)

    您还可以使用
    binmode
    更改已打开的文件句柄(例如STDIN/OUT)

    还可以使用pragma设置默认编码

    但对于这一点,我建议尝试
    binmode
    或更改打开的行,看看这是否解决了问题

    如果您有一个
    perl
    版本低于v5.8,那么事情就更棘手了,但是如果您告诉我们版本,可能可以解决问题

    顺便说一句,我注意到了另外两件事:

    • 这不是必需的,但最好使用字典范围的文件句柄(
      my$fh
      ,而不是
      文件
    • 当您在
      die
      字符串上添加换行符时,它会抑制通常为帮助您查找问题而添加的行号信息
    • 如果将无法打开的文件名(或失败的SQL,或其他任何内容)放在die消息中,则调试会更容易
    • 不要在Perl(5)中使用子原型。:(
      sub-uniconvert($)
      )。不要把
      $
      /
      @
      /
      %
      等放在那里。它不只是检查事物,它可能会以令人困惑的方式改变意义。只需要创建新的“内置样式”操作符
    您正在尝试将unicode字符转换为HTML实体,但由于编码问题而无法工作?不太清楚。发生了什么以及您期望发生什么?P.S.正如dma_k所指出的,如果您继续使用自己的子例程
    unicodecovert
    ,您需要
    使用utf8
    来识别源代码中的Unicode字符或将其转换为数字编码,例如“\x{263a}”。:utf8是编码(UTF-8)的快捷方式“谢谢你,布莱恩。。。我通常使用
    ':utf8'
    ,但在检查文档时,似乎存在差异,
    ':编码(UTF-8)
    对于输入文件来说更安全(发现它:perluniintro,Unicode I/O,就在
    binmode
    示例的大列表下方)。。。你能澄清一下这是不是真的吗?谢谢
    sub unicodeConvert($) {
       my $str = shift;
        my %entityRef = ("&" => "&amp;", '¢' => "&cent;", '¤' => "&curren;", '¦' => "&brvbar;", '¨' => "&uml;", 'ª' => "&ordf;", '¬' => "&not;", '®' => "&reg;", '°' => "&deg;", '²' => "&sup2;", '´' => "&acute;", '¶' => "&para;", '¸' => "&cedil;", 'º' => "&ordm;", '¼' => "&frac14;", '¾' => "&frac34;", 'À' => "&Agrave;", 'Â' => "&Acirc;", 'Ä' => "&Auml;", 'Æ' => "&AElig;", 'È' => "&Egrave;", 'Ê' => "&Ecirc;", 'Ì' => "&Igrave;", 'Î' => "&Icirc;", 'Ð' => "&ETH;", 'Ò' => "&Ograve;", 'Ô' => "&Ocirc;", 'Ö' => "&Ouml;", 'Ø' => "&Oslash;", 'Ú' => "&Uacute;", 'Ü' => "&Uuml;", 'Þ' => "&THORN;", 'à' => "&agrave;", 'â' => "&acirc;", 'ä' => "&auml;", 'æ' => "&aelig;", 'è' => "&egrave;", 'ê' => "&ecirc;", 'ì' => "&igrave;", 'î' => "&icirc;", 'ð' => "&eth;", 'ò' => "&ograve;", 'ô' => "&ocirc;", 'ö' => "&ouml;", 'ø' => "&oslash;", 'ú' => "&uacute;", 'ü' => "&uuml;", 'þ' => "&thorn;", '¡' => "&iexcl;", '£' => "&pound;", '¥' => "&yen;", '§' => "&sect;", '©' => "&copy;", '«' => "&laquo;", '¯' => "&macr;", '±' => "&plusmn;", '³' => "&sup3;", 'µ' => "&micro;", '·' => "&middot;", '¹' => "&sup1;", '»' => "&raquo;", '½' => "&frac12;", '¿' => "&iquest;", 'Á' => "&Aacute;", 'Ã' => "&Atilde;", 'Å' => "&Aring;", 'Ç' => "&Ccedil;", 'É' => "&Eacute;", 'Ë' => "&Euml;", 'Í' => "&Iacute;", 'Ï' => "&Iuml;", 'Ñ' => "&Ntilde;", 'Ó' => "&Oacute;", 'Õ' => "&Otilde;", '×' => "&times;", 'Ù' => "&Ugrave;", 'Û' => "&Ucirc;", 'Ý' => "&Yacute;", 'ß' => "&szlig;", 'á' => "&aacute;", 'ã' => "&atilde;", 'å' => "&aring;", 'ç' => "&ccedil;", 'é' => "&eacute;", 'ë' => "&euml;", 'í' => "&iacute;", 'ï' => "&iuml;", 'ñ' => "&ntilde;", 'ó' => "&oacute;", 'õ' => "&otilde;", '÷' => "&divide;", 'ù' => "&ugrave;", 'û' => "&ucirc;", 'ý' => "&yacute;", 'ÿ' => "&yuml;");
        while( ( my $key, my $obj ) = each( %entityRef ) ) {
            if( $key ne '&' ) {
                    $str =~ s/$key/$obj/gis
            } else {
                    $str =~ s#&((?!(quot;)|(amp;)|(cent;)|(curren;)|(brvbar;)|(uml;)|(ordf;)|(not;)|(reg;)|(deg;)|(sup2;)|(acute;)|(para;)|(cedil;)|(ordm;)|(frac14;)|(frac34;)|(Agrave;)|(Acirc;)|(Auml;)|(AElig;)|(Egrave;)|(Ecirc;)|(Igrave;)|(Icirc;)|(ETH;)|(Ograve;)|(Ocirc;)|(Ouml;)|(Oslash;)|(Uacute;)|(Uuml;)|(THORN;)|(agrave;)|(acirc;)|(auml;)|(aelig;)|(egrave;)|(ecirc;)|(igrave;)|(icirc;)|(eth;)|(ograve;)|(ocirc;)|(ouml;)|(oslash;)|(uacute;)|(uuml;)|(thorn;)|(iexcl;)|(pound;)|(yen;)|(sect;)|(copy;)|(laquo;)|(macr;)|(plusmn;)|(sup3;)|(micro;)|(middot;)|(sup1;)|(raquo;)|(frac12;)|(iquest;)|(Aacute;)|(Atilde;)|(Aring;)|(Ccedil;)|(Eacute;)|(Euml;)|(Iacute;)|(Iuml;)|(Ntilde;)|(Oacute;)|(Otilde;)|(times;)|(Ugrave;)|(Ucirc;)|(Yacute;)|(szlig;)|(aacute;)|(atilde;)|(aring;)|(ccedil;)|(eacute;)|(euml;)|(iacute;)|(iuml;)|(ntilde;)|(oacute;)|(otilde;)|(divide;)|(ugrave;)|(ucirc;)|(yacute;)|(yuml;)|(nbsp;)))#$obj#gis;   
            }
        }
        return $str;
    }
    
    open FILE, "<", $file or die "Cannot open:$!\n", "UTF-8";
    
    open(my $fh,'<:encoding(UTF-8)', $file) or die "Error opening $file: $!";
    
    binmode(STDOUT, ":encoding(UTF-8)");