首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从UTF-16到UTF-8 PHP转换

从UTF-16到UTF-8 PHP转换
EN

Stack Overflow用户
提问于 2020-10-16 02:57:41
回答 3查看 1.1K关注 0票数 0

我有一个GSM-7返回字符串从USB调制解调器设备,其中包含UTF-16编码字符串.示例字符串是"007A006E0061006B006F007600690020010D0107017E0020006800610068006100730068".

我需要一个PHP解决方案(函数)将字符串从UTF-16 (小endian)转换为UTF-8 (人类可读的格式)。上面字符串的翻译应该是这个"znakovičćžha散列“。我花了几个小时寻找合适的解决方案,但没有成功。我试着用了很多不同的选项,但是我没有得到想要的结果。我找到了一个在线服务来转换字符串,下面是打印屏幕https://prnt.sc/v09r57

提前谢谢你

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2020-10-18 23:05:18

几天前,我已经找到了更简单的解决方案,效果非常好。如果有人需要使用:

代码语言:javascript
复制
    $string="007A006E0061006B006F007600690020010D0107017E0020006800610068006100730068";
    $packed = pack('H*', $string);
    echo iconv("UTF-16BE","UTF-8",$packed);

谢谢大家的回应。

票数 -1
EN

Stack Overflow用户

发布于 2020-10-16 10:34:40

下面的代码片段可能会有所帮助(我是一个php noob,所以自己做一个函数;也许您需要安装或intl):

代码语言:javascript
复制
<?php
$strinput = "007A006E0061006B006F007600690020010D0107017E0020006800610068006100730068";
print "$strinput\n";

$stroutput = '';
for ( $i = 0; $i < strlen($strinput); $i += 4 ) {
    $stroutput .= IntlChar::chr(hexdec( substr( $strinput,$i,4)));
};

print $stroutput;
?>

输出.\SO\64382302.php

代码语言:javascript
复制
007A006E0061006B006F007600690020010D0107017E0020006800610068006100730068
znakovi čćž hahash
票数 0
EN

Stack Overflow用户

发布于 2020-10-18 19:23:21

这是UTF-16BE (最有意义的比特优先),而不是LE (也见UTF-16例)。

代码语言:javascript
复制
// Hexadecimal text: each 2 characters describe 1 byte
$sText= '007A006E0061006B006F007600690020010D0107017E0020006800610068006100730068';

// Actually forming bytes of that text, i.e. making '7A' a 'z' and '20' a ' '
$sUtf16= pack( 'H*', $sText );

如果你真的需要UTF-8的话:

代码语言:javascript
复制
// Since we now have an actual encoding: convert it to the wanted one
$sUtf8= mb_convert_encoding( $sUtf16, 'UTF-8', 'UTF-16BE' );

// To make sure the consumer interpretes the data correctly
header( 'Content-type: text/plain; charset=UTF-8' );
echo $sUtf8;

但是,如果客户端无论如何都能够处理不同的编码(比如互联网浏览器),您可以立即输出UTF-16BE:

代码语言:javascript
复制
header( 'Content-type: text/html; charset=UTF-16BE' );
echo $sUtf16;

这段代码甚至可以与PHP5一起工作,并且不需要额外的扩展。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64382302

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档