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

Cra*_*lus 0 string perl encoding encode utf-8

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

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

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

$arg = Encode::decode("utf8", $arg);  
$arg = Encode::encode("iso-8859-1, $args);  
Run Code Online (Sandbox Code Playgroud)

的perldoc似乎是说,我需要的是覆盖

ike*_*ami 5

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

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


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

一般来说,你不能.decode如果您不知道它是什么,您期望如何解释它?

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

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

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

不可以.这两行必须使用UTF-8进行文本编码.如果不知道用于编码的编码,就无法解码.