PHP 将字符串从 UCS-2LE 转换为 UTF-8
PHP convert string from UCS-2LE to UTF-8
我目前正在做一个项目,我需要按顺序(256 字节)读取一个包含语言信息的文件。所以字符串偏移量 0 开始语言代码 1 的值,偏移量 256 开始语言代码 2 的值,...
虽然我不完全理解文件的编码。作者说该文件是用 Unicode 编码的,通过在 Notepad++ 中将其标识为 UCS2 LE w/o BOM.
打开它来确认。
我正在尝试转换文本,然后将其拆分为 255 字节长的块,如下所示:
$content = mb_convert_encoding($content, 'UTF-8', 'UCS-2LE');
这会产生类似于“Пользователь заблокирован
”的值。我知道这个文件是俄文的,所以看起来很有希望。但是仍然有一些值看起来不正确:
"┐. ð¢ð░Ðüð¥Ðü ÐëðÁð╗ð¥Ðçð© ð£ð░"
用这段代码转换它会产生相同的结果:
$content = iconv('UTF-16', 'UTF-8', $content);
这是我从不同来源获得的不同编码:
Author:
"Unicode"
file -i <FILENAME>
"<FILENAME>: application/octet-stream; charset=binary"
mb_detect_encoding($content);
"UTF-8"
Notepad++:
"UCS-2 LE w/o BOM"
这是文件的一部分(通过 vi
提取,为清楚起见添加了换行符):
^_^D>^D;^D=^DK^D9^D ^@0^D4^D@^D5^DA^D ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@
^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@
^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@
^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@
^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@
^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@
^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@
^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@
^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@
^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@L^@a^@n^@g^@u
^@a^@g^@e^@ ^@S^@p^@r^@a^@c^@h^@e^@ ^@L^@a^@n^@g^@u^@e^@ ^@L^@i^@n^@g^@u^@a^@
^@I^@d^@i^@o^@m^@a^@ ^@/^D7^DK^D:^D ^@B^@a^@h^@a^@s^@a^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@
^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@
^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@
^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@
^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@
^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@
^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@
^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@
^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@^P^D4^D@^D5^DA^D ^@=^D0^D7^D=
^D0^DG^D5^D=^D8^DO^D ^@
我应该如何读取此文件并将其转换为使用 PHP 的正确编码?现在是哪种编码?提前致谢!
你的测试 $content = iconv('UTF-16', 'UTF-8', $content);很好,但它不仅是 UTF-16,而且是 UTF-16LE
<?php
$content = file_get_contents('ru.txt');
$content = iconv('UTF-16LE', 'UTF-8', $content);
?>
<html>
<head>
<title>encodage</title>
<meta charset="UTF-8">
</head>
<body>
<?php
echo $content;
?>
</body>
</html>
我不知道它是否好(无法理解俄语)但这是我的输出:
Полный адрес Language Sprache Langue Lingua Idioma Язык Bahasa Адрес
назначения ...
编辑:为了了解编码,我只使用乌龟。我 select 2 个文件(ru.txt 和其他),我做了一个比较文件。乌龟显示编码。
看屏幕:
看来编码不是问题,而是之后的拆分。我使用 str_split
将生成的字符串转换为具有等长条目的数组。但是,我没有意识到文档记录了以下内容:
str_split() will split into bytes, rather than characters when dealing with a multi-byte encoded string.
使用 wc -c
和 wc -m
我发现结果元素的字符数相同,但字节数不同。所以 str_split 在某些时候在字节之间分割字符。
我没有找到任何按字节拆分多字节字符串的内置函数,所以我使用了类似于 posted here.
的函数
我目前正在做一个项目,我需要按顺序(256 字节)读取一个包含语言信息的文件。所以字符串偏移量 0 开始语言代码 1 的值,偏移量 256 开始语言代码 2 的值,...
虽然我不完全理解文件的编码。作者说该文件是用 Unicode 编码的,通过在 Notepad++ 中将其标识为 UCS2 LE w/o BOM.
打开它来确认。我正在尝试转换文本,然后将其拆分为 255 字节长的块,如下所示:
$content = mb_convert_encoding($content, 'UTF-8', 'UCS-2LE');
这会产生类似于“Пользователь заблокирован
”的值。我知道这个文件是俄文的,所以看起来很有希望。但是仍然有一些值看起来不正确:
"┐. ð¢ð░Ðüð¥Ðü ÐëðÁð╗ð¥Ðçð© ð£ð░"
用这段代码转换它会产生相同的结果:
$content = iconv('UTF-16', 'UTF-8', $content);
这是我从不同来源获得的不同编码:
Author:
"Unicode"
file -i <FILENAME>
"<FILENAME>: application/octet-stream; charset=binary"
mb_detect_encoding($content);
"UTF-8"
Notepad++:
"UCS-2 LE w/o BOM"
这是文件的一部分(通过 vi
提取,为清楚起见添加了换行符):
^_^D>^D;^D=^DK^D9^D ^@0^D4^D@^D5^DA^D ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@
^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@
^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@
^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@
^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@
^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@
^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@
^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@
^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@
^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@L^@a^@n^@g^@u
^@a^@g^@e^@ ^@S^@p^@r^@a^@c^@h^@e^@ ^@L^@a^@n^@g^@u^@e^@ ^@L^@i^@n^@g^@u^@a^@
^@I^@d^@i^@o^@m^@a^@ ^@/^D7^DK^D:^D ^@B^@a^@h^@a^@s^@a^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@
^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@
^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@
^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@
^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@
^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@
^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@
^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@
^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@^P^D4^D@^D5^DA^D ^@=^D0^D7^D=
^D0^DG^D5^D=^D8^DO^D ^@
我应该如何读取此文件并将其转换为使用 PHP 的正确编码?现在是哪种编码?提前致谢!
你的测试 $content = iconv('UTF-16', 'UTF-8', $content);很好,但它不仅是 UTF-16,而且是 UTF-16LE
<?php
$content = file_get_contents('ru.txt');
$content = iconv('UTF-16LE', 'UTF-8', $content);
?>
<html>
<head>
<title>encodage</title>
<meta charset="UTF-8">
</head>
<body>
<?php
echo $content;
?>
</body>
</html>
我不知道它是否好(无法理解俄语)但这是我的输出:
Полный адрес Language Sprache Langue Lingua Idioma Язык Bahasa Адрес назначения ...
编辑:为了了解编码,我只使用乌龟。我 select 2 个文件(ru.txt 和其他),我做了一个比较文件。乌龟显示编码。 看屏幕:
看来编码不是问题,而是之后的拆分。我使用 str_split
将生成的字符串转换为具有等长条目的数组。但是,我没有意识到文档记录了以下内容:
str_split() will split into bytes, rather than characters when dealing with a multi-byte encoded string.
使用 wc -c
和 wc -m
我发现结果元素的字符数相同,但字节数不同。所以 str_split 在某些时候在字节之间分割字符。
我没有找到任何按字节拆分多字节字符串的内置函数,所以我使用了类似于 posted here.
的函数