第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

PHP 的 utf8_decode 和 C# 的 Encoding.UTF8.GetString

PHP 的 utf8_decode 和 C# 的 Encoding.UTF8.GetString

PHP
MMTTMM 2023-04-21 13:37:45
我有這個(gè) PHP 代碼,它使用 utf8_decode() 在 UTF-8 字符串中轉(zhuǎn)換兩個(gè)字節(jié)數(shù)組(一個(gè)有 32 個(gè)字節(jié),另一個(gè)有 70 個(gè)字節(jié)):$bytes32 = [144, 204, 205, 119, 77, 176, 172, 140, 110, 162, 222, 255, 14, 38, 252, 82, 118, 138, 130, 124, 145, 199, 55, 162, 224, 80, 102, 141, 140, 57, 194, 36];$string32 = implode(array_map("chr", $bytes32));$string32Utf8 = utf8_decode($string32);$bytes70 = [239, 191, 189, 239, 191, 189, 239, 191, 189, 119, 77, 239, 191, 189, 239, 191, 189, 239, 191, 189, 110, 239, 191, 189, 239, 191, 189, 239, 191, 189, 14, 38, 239, 191, 189, 82, 118, 239, 191, 189, 239, 191, 189, 124, 239, 191, 189, 239, 191, 189, 55, 239, 191, 189, 239, 191, 189, 80, 102, 239, 191, 189, 239, 191, 189, 57, 239, 191, 189, 36];$string70 = implode(array_map("chr", $bytes70));$string70Utf8 = utf8_decode($string70);echo '$string32Utf8: ' . $string32Utf8; // echoes ???wM???n??&?Rv??|??7??Pf??9?$echo '$string70Utf8: ' . $string70Utf8; // echoes ???wM???n???&?Rv??|??7??Pf??9?$echo '$string32Utf8 === $string70Utf8: ' . json_encode($string32Utf8 ===  $string70Utf8); // echoes false然后我有這個(gè) C# 代碼,它使用 Encoding.UTF8.GetString() 做同樣的事情:byte[] bytes32 = new byte[] { 144, 204, 205, 119, 77, 176, 172, 140, 110, 162, 222, 255, 14, 38, 252, 82, 118, 138, 130, 124, 145, 199, 55, 162, 224, 80, 102, 141, 140, 57, 194, 36 };string string32Utf8 = Encoding.UTF8.GetString(bytes32);byte[] bytes70 = new byte[] { 239, 191, 189, 239, 191, 189, 239, 191, 189, 119, 77, 239, 191, 189, 239, 191, 189, 239, 191, 189, 110, 239, 191, 189, 239, 191, 189, 239, 191, 189, 14, 38, 239, 191, 189, 82, 118, 239, 191, 189, 239, 191, 189, 124, 239, 191, 189, 239, 191, 189, 55, 239, 191, 189, 239, 191, 189, 80, 102, 239, 191, 189, 239, 191, 189, 57, 239, 191, 189, 36 };string string70Utf8 = Encoding.UTF8.GetString(bytes70);首先,在 C# 中,兩個(gè)字節(jié)數(shù)組在轉(zhuǎn)換后產(chǎn)生相同的字符串,這與 PHP 不同。其次,與 PHP 相比,C# 中的字符串有所不同。PHP 中是否有一個(gè)函數(shù)在給定相同輸入的情況下實(shí)際上會(huì)返回與 C# 的 Encoding.UTF8.GetString() 相同的輸出?或者是否有我遺漏的東西實(shí)際上導(dǎo)致了 C# 和 PHP 之間的不同輸出?
查看完整描述

1 回答

?
動(dòng)漫人物

TA貢獻(xiàn)1815條經(jīng)驗(yàn) 獲得超10個(gè)贊

您示例中的字節(jié)數(shù)組不是有效的 UTF-8?;旧?,如果您在 C# 輸出中看到 ?? 符號(hào),則表示Encoding.UTF8.GetString()使用替換字符來表示無法轉(zhuǎn)換為輸出字符的編碼輸入字節(jié)序列。

但是,您仍然可以在 PHP 中重現(xiàn)完全相同的行為Encoding.UTF8.GetString()

$bytes32 = [144, 204, 205, 119, 77, 176, 172, 140, 110, 162, 222, 255, 14, 38, 252, 82, 118, 138, 130, 124, 145, 199, 55, 162, 224, 80, 102, 141, 140, 57, 194, 36];

$string32 = \pack('C*', ...$bytes32);

$string32Utf8 = \mb_convert_encoding($string32, 'ASCII', 'UTF-8');


$bytes70 = [239, 191, 189, 239, 191, 189, 239, 191, 189, 119, 77, 239, 191, 189, 239, 191, 189, 239, 191, 189, 110, 239, 191, 189, 239, 191, 189, 239, 191, 189, 14, 38, 239, 191, 189, 82, 118, 239, 191, 189, 239, 191, 189, 124, 239, 191, 189, 239, 191, 189, 55, 239, 191, 189, 239, 191, 189, 80, 102, 239, 191, 189, 239, 191, 189, 57, 239, 191, 189, 36];

$string70 = \pack('C*', ...$bytes70);

$string70Utf8 = \mb_convert_encoding($string70, 'ASCII', 'UTF-8');


\var_dump($string32Utf8, $string70Utf8, $string32Utf8 === $string70Utf8);

我做的不同的事情:

  1. 由于 byte array 表示UTF-8 string,我們不能使用chr將其轉(zhuǎn)換為二進(jìn)制字符串。如chr函數(shù)文檔中所述:

    此函數(shù)不知道任何字符串編碼,特別是不能傳遞 Unicode 代碼點(diǎn)值以生成多字節(jié)編碼(如 UTF-8 或 UTF-16)的字符串。

    pack另一方面,函數(shù)可以處理各種類型的二進(jìn)制數(shù)據(jù)格式。\pack('C*', ...$bytes32)意味著字節(jié)數(shù)組將被視為一系列無符號(hào)字符并打包成二進(jìn)制字符串。

  2. utf8_decode函數(shù)有一個(gè)非?;靵y的名字;它應(yīng)該被命名為類似的東西,utf8_to_iso88591因?yàn)檫@正是它的作用:

    將包含以 UTF-8 編碼的 ISO-8859-1 字符的字符串轉(zhuǎn)換為單字節(jié) ISO-8859-1

    如果我們想復(fù)制Encoding.UTF8.GetString()示例,我們真正需要做的是將 UTF-8 編碼的二進(jìn)制字符串轉(zhuǎn)換為 ASCII。你可以使用mb_convert_encoding函數(shù)來做到這一點(diǎn),就像這樣:mb_convert_encoding($utf8String, 'ASCII', 'UTF-8')

希望這些評(píng)論會(huì)有所幫助!


查看完整回答
反對(duì) 回復(fù) 2023-04-21
  • 1 回答
  • 0 關(guān)注
  • 183 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)