Php printf()扩展Unicode字符?

Php printf()扩展Unicode字符?,php,unicode,utf-8,printf,ascii,Php,Unicode,Utf 8,Printf,Ascii,我试图理解printf()。 我不太明白这些参数 我可以看到,第一个参数似乎是将应用格式设置的字符串 第二个是要格式化的第一个变量,第三个似乎是要格式化的第二个变量 我不明白的是如何让它打印特殊的unicode字符。 例如,超越a-z、a-z、!@#$%^&*(){}等 还有,为什么它会输出字符串中最后一个引号的位置 输出: 有� 视为整数�三十二 $formatthis = 219; $printthis = 98; // %c - the argument is treated as an

我试图理解printf()。 我不太明白这些参数

我可以看到,第一个参数似乎是将应用格式设置的字符串

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

我不明白的是如何让它打印特殊的unicode字符。 例如,超越a-z、a-z、!@#$%^&*(){}等

还有,为什么它会输出字符串中最后一个引号的位置

输出: 有� 视为整数�三十二

$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);

编辑,好的,所以我正在看的图表显然是以十六进制值显示数字,我没有立即注意到,十六进制的41是ASCII 065

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

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

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..

您案例中的问题是1)您输出的字节在您解释结果的编码中没有任何意义(这意味着
98
的字节在UTF-8中没有任何意义,这就是为什么您看到�)和2)您正在回送
printf
的结果,它输出32(
printf
返回它输出的字节数)。

所以我说的“十进制”太具体了"? 哦,好吧,我想这会让它更容易理解,因为十进制、十六进制和二进制在这篇文章中都是混合的。我怎么能把它编码成UTF-16(Dec)//Snowman=9731 Dec UTF 16?我现在明白了,printf(“%c,%x,%d,%b',65,65,65,65,65);但是如果你说的是%c将它转换成二进制,我想是%b做的0x的意义如何?是否有必要在十六进制前面添加0x,或者由于写入%c,仅在PHP需要十进制值的情况下才添加0x?如果你写的是E2,98,83,十六进制是%x,那行吗?我现在看到,0x是向PHP指出整数是十六进制的必要条件,因为编写字母PHP不会将其解释为数字,因为十六进制值中使用的字母。@JZe
226
0xE2
在PHP中完全相同,只是符号不同。它们都产生相同的整数。@UTF-16中的JZe Snowman是
printf(“%c%c%c%c',0xFE,0xFF,0x26,0x03)
printf('%c%c%c', 226, 152, 131); // ☃
// or
printf('%c%c%c', 0xE2, 0x98, 0x83); // ☃