我一直在寻找我的!!!试图找到一个PHP函数将UTF8转换为等效数字。我不完全确定该怎么称呼这个号码(我听说它叫做纵坐标?)但这只是一个例子:http://jrgraphix.net/r/Unicode/3040-309F
基本上我正在尝试在PHP中读取UTF-8 .txt文件,然后将每行保存在一个数组中,这样我就可以搞砸了。
如果有人可以帮助我,我将非常感激,因为我还不熟悉UTF8。
编辑: 这是我到目前为止所得到的:
echo "var TextCharacters = new Array();\n";
$LineArray = array();
$file_handle = fopen("lesson1.txt", "r");
while (!feof($file_handle))
{
$line_of_text = fgets($file_handle);
array_push($LineArray, $line_of_text);
}
fclose($file_handle);
foreach($LineArray as $s)
{
for($i = 0; $i < mb_strlen($s,"utf-8"); $i++)
{
$char = mb_substr($s, $i, 1, "utf-8");
echo "alert(go(" . bin2hex(iconv('UTF-8', 'UCS-2', $char)) . "));";
}
}
答案 0 :(得分:4)
您要查找的是Unicode代码点,即Unicode字符表中已知字符的数字标识符。 “最便宜”的方法是通过UCS-2字符编码,它将1:1从字节映射到Unicode代码点:
echo bin2hex(iconv('UTF-8', 'UCS-2', 'あ'));
// 3042
注意事项:返回的代码总是长度为4个十六进制数字(您可能喜欢或不喜欢),UCS-2不支持高于BMP的字符,即高于代码点FFFF。
答案 1 :(得分:-1)
PHP中的UTF-8没有什么神奇之处。当您读取文件时,您将获得字节值(而不是解析为字符)。迭代您已读取的数据并使用ord()获取字节的十进制值。
如果要使用UTF-8代码点执行此操作,可以使用mb_substr或iconv_substr提取每个字符,然后再使用ord()打印组成的每个字节的值这个角色。
更新:使用完整的解决方案进行扩展:
utf8.test:fooÆØÅござ
$utf8 = file_get_contents("utf8.test");
for ($i = 0; $i < mb_strlen($utf8, "utf-8"); $i++)
{
$char = mb_substr($utf8, $i, 1, "utf-8");
print($char);
print("\n");
for ($j = 0; $j < strlen($char); $j++)
{
print(dechex(ord($char[$j])));
}
print("\n\n");
}
输出:
f
66
o
6f
o
6f
Æ
c386
Ø
c398
Å
c385
ご
e38194
ざ
e38196
希望有所帮助。