将非ASCII代码输出到文件


Outputting non ASCII codes to a file

我在用PHP将非ASCII代码写入文件时遇到问题。

例如,当我在键盘上按ALT+20时,我会得到一个¶字符。

但是,当我将chr(20)写入文件,并通过Notepad++打开文件后,它会读取DC4,或者如果我尝试将其写为.csv,然后用excel打开,我会得到一个?被一个正方形包围。

您主要误解了操作系统的一个功能。如前所述,按下键盘组合键(ALT+数字键盘20)不会输入US-ASCII字符十进制20。来自您的操作系统文档:

如果您键入的第一个数字是从1到9的任何数字,则该值在系统的OEM代码页中被识别为代码点。根据在"控制面板"的"区域和语言选项"中指定的Windows系统语言,结果会有所不同。例如,如果您的系统语言是英语(US),则代码页为437(MS-DOS Latin-US),因此按ALT,然后在数字键盘上键入163会产生ú(U+00FA,带锐音符的拉丁文小写字母U)。如果您的系统语言是希腊语(OEM代码页737 MS-DOS Greek),则相同的序列会产生希腊语小写字母MU(U+03BC)。

  • 取自:输入键盘上没有的字符(Windows XP Professional产品文档)

根据您的描述,您已经获得了OEM 437维基百科代码页437,因此您要查找的代码点是Pilcrow维基百科。在Unicode中,这是Unicode字符"Pilcrow SIGN"(U+00B6)。

因此,无论你想在哪里输出,你都需要找到所需的目标文件字符编码,并以正确的编码对该字符进行编码,仅此而已。没有魔法,什么都没有。

正如Jeff所说,控制字符(ASCII代码<32)的解释总是不同的。要显示段落符号,请尝试发送chr(182)utf8_encode(chr(182)),具体取决于目标文件的字符集。