显示不使用utf8编码的中文字符


Display chinese characters WITHOUT using utf8 encoding?

我正在使用unicode_general_ci排序规则从MySQL数据库中获取行。列包含汉字,例如格拉巴酒和蒸馏物我需要显示这些字符。

知道我应该使用utf-8编码:

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

但我不能:我正在开发一个遗留应用程序,其中大多数.php文件都保存为ANSI,整个网站都在使用:

<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />

有什么办法展示它们吗?

额外问题:我试图手动更改Chrome中的编码(工具->编码->UTF-8),但似乎不起作用:页面被重新加载,但????而不是显示汉字。

您可以显示格使用数字实体引用&#26684;等。在这种情况下,页面的编码应该无关紧要;HTML实体引用总是引用Unicode代码点。

PHP有一个用于此目的的函数htmlentities,但您似乎需要处理数字实体的变通方法。这个json_encode破解相当晦涩,但可能是程序上最简单的。

echo preg_replace('/''''u([0-9a-f]{4})/', '&#x$1;', 
     preg_replace('^/"(.*)"$/', '$1', json_encode($s)));

这充分利用了json_encode将不约而同地为您进行转换的事实;剩下的都是机械。(我想这是你的PHP。)

IDEone演示

你的"奖金问题"并不是一个真正的问题,但当然,这就是它的工作原理;128-255范围内的原始字节很少是有效的UTF-8序列,所以除非页面上有有效的UTF-8,否则很可能会得到这些字节的"无效字符"替换字形。

需要说明的是,如果错误地显示在Windows代码页1252(你和微软经常不小心地称之为"ANSI")中,UTF-8文本中的前两个汉字将显示为格拉——如果页面上有这些字节,那么强制浏览器以UTF-8显示实际上也应该是一种解决方法。

关于其他背景,我推荐@deceze的《每个程序员绝对、积极地需要知道的关于使用文本的编码和字符集的知识》。

我不确定你能不能。iso-8859-1通常被称为"拉丁语1"。根本不支持任何亚洲汉字类型的语言。

http://en.wikipedia.org/wiki/ISO/IEC_8859-1

ISO 8859-1编码了它所称的"拉丁字母1号",由191个拉丁字母组成。这种字符编码方案在整个美洲、西欧、大洋洲和非洲大部分地区都使用。它也常用于东亚语言的大多数标准罗马化。