【发布时间】:2019-12-30 19:01:08
【问题描述】:
我有一个 windows 1251 编码的字符串,需要转换为十六进制或二进制(但如果我设法将其转换为两者之一,我将能够将其转换为另一个)。该字符串来自收银机,因此我对初始编码无能为力。
到目前为止,我已尝试将其转换为 UTF-8,然后转换为 bin,然后转换为十六进制,但最后它是不正确的。 字符串是“Ђ ЂЂ„‚”,十六进制是 80 20 80 80 84 82,二进制应该是 10000000 10100000 10000000 10000000 10000100 10000010
我认为我的第一个问题是 win-1251 到 utf-8 的对话。
$decodedUtf8 = mb_convert_encoding($decoded, "utf-8", "windows-1251");
结果是 'Ђ ЂЂ„‚' -> 'Ђ ЂЂ„‚',我没有编码经验,但这个看起来很可疑。
到目前为止,我的整个代码是这样的:
public function decodeStatus($encodedStr){
$decoded = base64_decode($encodedStr);
//$iconverted = iconv('cp1251', 'utf-8', $decoded);
$decodedUtf8 = mb_convert_encoding($decoded, "utf-8", "windows-1251");
echo $decodedUtf8;
$chars = str_split($decodedUtf8);
foreach ($chars as $char){
$bits[] = decbin(ord($char));
}
return $bits;
}
最终的数组应该由 6 个元素组成,如下所示:
[
1000000,
10100000,
10000000,
10000000,
10000100,
10000010
]
有没有办法只用 PHP 转换它?你能给我一些指导吗?
【问题讨论】:
-
$encodedStr 也是 base64 编码的吗?
-
@whydoubt 是的,这样我就可以通过javascript安全地发送字符串了。
标签: php hex windows-1251