是否应将显式字符编码和编码/解码推广为;“最佳做法”;用Perl?

是否应将显式字符编码和编码/解码推广为;“最佳做法”;用Perl?,perl,character-encoding,Perl,Character Encoding,我以前对字符编码问题只有模糊的认识,但这让我开始思考。以下内容也提供了更多思考的素材: 我所看到的唯一提到将源代码中的字符编码(例如,对于我们大多数人来说,使用utf8;)作为“最佳实践”的地方就是前面提到的答案 此外,提到我们应该使用encodeqw{Encode-decode}在Perl程序的“标准标题”中。因此,另一个“最佳实践”似乎应该是对所有输入进行解码,并对所有输出进行编码 你觉得怎么样 使用utf8实际上与此关系不大——几乎没有人使用unicode标识符,程序可以轻松地识别编

我以前对字符编码问题只有模糊的认识,但这让我开始思考。以下内容也提供了更多思考的素材:

我所看到的唯一提到将源代码中的字符编码(例如,对于我们大多数人来说,
使用utf8;
)作为“最佳实践”的地方就是前面提到的答案

此外,提到我们应该
使用encodeqw{Encode-decode}在Perl程序的“标准标题”中。因此,另一个“最佳实践”似乎应该是对所有输入进行解码,并对所有输出进行编码


你觉得怎么样

使用utf8实际上与此关系不大——几乎没有人使用unicode标识符,程序可以轻松地识别编码,而不必在代码中包含UTF-8字符串

但是,是的,我所知道的处理编码的最佳智慧是:

  • 始终知道数据的来源和格式,并尽快对其进行解码(除非它是作为字节处理的)
  • 始终了解您正在写入的数据格式或您的客户期望的数据格式,并在输出时进行编码(除非您的数据已经是字节)
  • 当涉及到文本时,请始终在程序的“内部”使用字符串
一百万个不同字符集和一百万种不同编码的存在本身就应该尽可能成为界面的一个细节。有些事情你仍然需要牢记在心——例如不同语言的不同排序规则——但无论如何,这是一个理想的目标,尽可能地遵循它会大大减少代码中“编码问题”的数量


为了更直接地回答您的问题,是的——如果您从外部读取文本数据而不进行解码,或者在任何地方发送数据而不进行编码,则很有可能您犯了错误,并且当其他人在与您不同的地区使用代码时,您的代码将被破坏。

谢谢您的回答。我想知道你所说的程序的“内部”是什么意思。我指的是程序的核心逻辑——实际上做任何程序或库所做的事情的一切,而不是与外部世界对话的部分。