将 ASCII 转换为 UTF-8 编码
Posted
技术标签:
【中文标题】将 ASCII 转换为 UTF-8 编码【英文标题】:Convert ASCII TO UTF-8 Encoding 【发布时间】:2011-06-26 10:05:52 【问题描述】:如何在 php 中将 ASCII 编码转换为 UTF8
【问题讨论】:
【参考方案1】:使用utf8_encode()
手册页可以在这里找到http://php.net/manual/en/function.utf8-encode.php
还可以阅读 Joel 关于软件的这篇文章。如果 Unicode 是什么以及它是如何工作的,它提供了一个很好的解释。 http://www.joelonsoftware.com/articles/Unicode.html
【讨论】:
utf8_encode 旨在将 latin-1 编码为 utf-8。仅适用于 latin-1(即 ISO-8859-1)。 这个答案是错误的。根据文档,“将 ISO-8859-1 字符串编码为 UTF-8”。 ISO-8859-1 不是 ASCII,就像西班牙语不是拉丁语一样。【参考方案2】:使用 mb_convert_encoding 将 ASCII 转换为 UTF-8。更多信息here
$string = "chárêctërs";
print(mb_detect_encoding ($string));
$string = mb_convert_encoding($string, "UTF-8");
print(mb_detect_encoding ($string));
【讨论】:
只有一个对我有用的解决方案,非常感谢! 这个答案基本上是错误的。 mb_detect_encoding () 的命名和记录都很差。它所做的只是循环通过一个与系统相关的并且通常是简短的编码列表(在我的系统中,只有ASCII
和UTF-8
)并返回所有字节都已分配的第一个。以可靠的方式以编程方式检测文本编码与检测图片是否有猫一样困难。【参考方案3】:
如果您确定您当前的编码是纯 ASCII,那么您无需执行任何操作,因为 ASCII 已经是有效的 UTF-8。
但是如果你还想转换,只是为了确定它是UTF-8,那么你可以使用iconv
$string = iconv('ASCII', 'UTF-8//IGNORE', $string);
IGNORE 将丢弃任何无效字符,以防万一有些不是有效的 ASCII。
【讨论】:
我一直认为“IGNORE”是自动/隐式错误的。【参考方案4】:“ASCII 是 UTF-8 的一个子集,所以...” - 所以 UTF-8 是一个集合? :)
换句话说:从 x00 到 x7F 使用 code points
构建的任何字符串在 ASCII 和 UTF-8 中都具有无法区分的表示(字节序列)。转换这样的字符串是没有意义的。
【讨论】:
这里的关键词是“从 x00 到 x7F 的代码点”。如果您的“ASCII”代码点从 x10 到 xFF,那么您需要做更多的工作。【参考方案5】:ASCII 是 UTF-8 的子集,因此如果文档是 ASCII 则它已经是 UTF-8。
【讨论】:
请注意,如果 ASCII 是“扩展”ascii,那么您可能会遇到问题。 en.wikipedia.org/wiki/Extended_ASCII以上是关于将 ASCII 转换为 UTF-8 编码的主要内容,如果未能解决你的问题,请参考以下文章