我在用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))
,具体取决于目标文件的字符集。