printf()扩展的Unicode字符?

时间:2014-12-15 03:08:38

标签: php unicode utf-8 printf ascii

$formatthis = 219;
$printthis = 98;
// %c - the argument is treated as an integer, and presented as the character with 
        that ASCII value.

$string = 'There are %c treated as integer %c';
echo printf($string, $formatthis, $printthis);

我正在尝试理解printf()。 我不太了解参数。

我可以看到第一个参数似乎是格式化应用的字符串。

第二个是要格式化的第一个变量,第三个似乎是要格式化的第二个变量。

我不明白的是如何打印出特殊的unicode字符。 例如。超越a-z,A-Z,!@#$%^& *(){}“ETC。

另外,为什么在字符串中输入最后一个引号的位置?

输出: 有 被视为整数 32

How could I encode this in to UTF-16 (Dec) // Snowman = 9,731 DEC UTF 16? 

UTF-8 'LATIN CAPITAL LETTER A' (U+0041) = 41, but if I write in PHP 41 I will get ')' I googled     an ASCII table and it's showing that the number for A is 065...

ASCII is a subset of UTF-8, so if a document is ASCII then it is already UTF-8

If it's already in UTF-8, why are those two numbers different? Also the outputs different..
编辑,好吧所以我正在看的图表显然是显示HEX值的数字,我没有立即注意到,HEX中的41是ASCII 065

1 个答案:

答案 0 :(得分:2)

%c基本上是一个int2bin函数,这意味着它将一个数字格式化为二进制表示。这将上升到十进制数255,它将作为字节0xFF输出。

要输出雪人角色☃,您需要输出在您选择的编码中表示它所需的确切字节数。如果您选择UTF-8对其进行编码,则必需的字节为E2 98 83

printf('%c%c%c', 226, 152, 131); // ☃
// or
printf('%c%c%c', 0xE2, 0x98, 0x83); // ☃

你的情况下的问题是1)你输出的字节并不意味着你正在解释结果的编码中的任何内容(意味着98的字节在UTF中没有任何意义-8此时,这就是为什么你看到“ ”)和2)你echo printf的结果,输出32(printf返回它输出的字节数。)