【问题标题】:Convert UTF8 Text and Numbers to UTF16-BE for Clickatell将 UTF8 文本和数字转换为 Clickatell 的 UTF16-BE
【发布时间】:2016-07-09 15:07:48
【问题描述】:

我为我使用的网络应用程序使用在线短信服务 (Clickatell)。我的主要语言是希腊语,所以我需要在我的 php 文件中将短信文本转换为 UTF-16BE,然后再发送。例如我需要转换文本

“Το ραντεβού σας έχει μεταφερθεί στις 12-12-2016 και ώρα 18:25”

03a403bf002003c103b103bd03c403b503b203bf03cd002003c303b103c2002003ad03c703b503b9002003bc03b503c403b103c603b503c103b803b503af002003c303c403b903c2002000310032002d00310032002d0032003000310036002003ba03b103b9002003ce03c103b1002000310038003a00320035 P>

我需要转换包括空格、符号和数字在内的所有内容。 我找到了一些 php 命令,但它们只转换文本。

    $text=strtoupper(str_replace(array('"', '\u'), array('',''), json_encode('Το ραντεβού σας έχει μεταφερθεί στις 12-12-2016 και ώρα 18:25')));

当使用上面的代码时,我得到以下结果:

03a403bf 03c103b103bd03c403b503b203bf03cd 03c303b103c2 03ad03c703b503b9 03b103b503b9 03b103b503b503b103b503b903b103b503b503b103b903b203b103b903c212-2016 03ba03b103b9 03ce03c103b1 18:25

如果您注意到日期和时间以及所有空格都不是 unicode。

谁能告诉我如何在 unicode 中获取我的整个短语?我怎样才能用 php 做到这一点? 提前谢谢你

【问题讨论】:

标签: php utf-8 encode utf-16


【解决方案1】:

我不确定您所说的“他们只转换文本”是什么意思,但如果您希望将 UTF-8 字符串转换为 UTF-16BE,那么您可以尝试:

iconv('UTF-8', 'UTF-16BE', $string);

或者..

mb_convert_encoding($string, 'UTF-16BE', 'UTF-8');

编辑:

由于您现在共享了一些代码,因此您的转换技术并不可靠,除非您真的希望它像您拥有的那样表示。您的结果基本上是单个字节的十六进制表示,而不是字节本身。

编辑 2:

如果您确实需要指定格式的文件,以下将为您完成:

$string = iconv('UTF-8', 'UTF-16BE', $string); // .. or mb_convert_encoding
$converted = '';

for ($i = 0; $i < strlen($string); $i++) {
    $converted .= sprintf('%02X', ord($string[$i]));
}

【讨论】:

  • 当我使用的代码,我加入上述我得到以下结果03A403BF 03C103B103BD03C403B503B203BF03CD 03C303B103C2 03AD03C703B503B9 03BC03B503C403B103C603B503C103B803B503AF 03C303C403B903C2 2016年12月12日03BA03B103B9 03CE03C103B1 18:25 跨度>
  • 如果您注意到日期和时间以及所有空格都不会转换。谢谢我尝试了你的解决方案,但我得到了奇怪的字符和问号
  • ASCII 值被分配了代码点,这些代码点与它们在 ASCII 下的原始编码相关联。 UTF-8 向后兼容 ASCIIUTF-16 使用 2/4 字节来编码代码点,在 BMP 字符(包括 ASCII)的情况下为 2。例如。对值5 进行编码会得到\x00\x35\x35 是有效的UTF-8,也代表5\x00 被视为NULL
  • RE 我的解决方案会导致奇怪的聊天:这确实是意料之中的,因为无论您在哪里打印它(浏览器或终端)都可能设置为期待 UTF-8。您所看到的是 UTF-16 呈现为好像是 UTF-8。这并不意味着字符串没有正确编码。
  • 由于某种原因我无法让它工作。我得到的最接近的是我上面发布的代码。基本上我需要的是一些代码来准确地复制这个站点正在做的branah.com/unicode-converter 选项转换空白字符“启用”和删除\u“启用”。我需要 unicode utf16-BE 中的所有消息内容。我发现的所有内容都只对文本进行编码。对不起,如果重复我自己,但我不能完全理解你在上面说什么以及我应该做什么。
猜你喜欢
  • 2020-09-18
  • 2012-11-04
  • 2012-02-13
  • 1970-01-01
  • 2014-02-24
  • 2013-05-29
  • 1970-01-01
  • 2021-08-21
  • 2012-12-03
相关资源
最近更新 更多