无论我实际拥有什么类型,如何确保转换为单个编码?

时间:2013-06-21 05:49:19

标签: string perl encoding utf-8 encode

如果我在perl方法中得到一个字符串但是我不知道那时它是否是特定的编码并且想要将它转换为特定的编码我该怎么做?
例如。如下所示(例如也可以是UTF-8而不是ISO8859):

sub func {
  my $arg = @_;  
  if($arg not ISO8859) {  
     $arg = Encode::encode("ISO-8859", $arg);  
  }  
  #use $arg    
}   

更新
以下是否正确? (目的是无论在方法中传递的$arg是什么,我都将它utf8,然后我将其编码为iso8859并获得单个表示,无论输入如何)< / p>

$arg = Encode::decode("utf8", $arg);  
$arg = Encode::encode("iso-8859-1, $args);  

perldoc似乎说我需要的是

1 个答案:

答案 0 :(得分:5)

80€还是Ђ?它甚至是文本吗?

您必须解码输入以便对它们执行任何操作,并且您必须知道输入的编码才能对其进行解码。


  

我当时不知道它是否是特定的编码,并希望将其转换为特定的编码,我该怎么做?

一般来说,你不能。如果您不知道它是什么,您希望如何指示decode如何解码?

充其量你可以使用启发式方法。您对输入的了解越多,您可以使用的启发式方法就越好。

例如,如果你知道一个字符串是用UTF-8或iso-8859-1编码的,那么你几乎可以完全猜出它是哪一个。事实上,你甚至可以解码一个混合了两者的文件!

  

以下是否正确? (目的是无论在方法中传递的$ arg是什么,我都将其设为utf8,然后将其编码为iso8859并获得单个表示,无论输入如何)

没有。必须使用UTF-8提供这两行文本。如果不知道用于编码的编码,就无法解码。