出于什么原因,我的文字在这个简短的代码中包含黑色钻石?

1 php unicode utf-8

我使用以下代码在localhost上创建了一个文件:

<?php

header('Content-Type: text/plain; charset=UTF-8');

echo "yoá";
Run Code Online (Sandbox Code Playgroud)

我的Firefox中的输出是:

在此输入图像描述

为什么Unicode替换字符?

Jon*_*Jon 5

因为您的PHP脚本文件未从编辑器中保存为UTF-8.所有体面的编辑器都允许您在几种不同的编码之间进行转换和保存(甚至记事本现在都这样做).保存为UTF-8,您将看到该字符正常显示.

技术说明:

有问题的字符是代码点U + 00E1("带有急性的拉丁文小写字母").假设您已将脚本保存为单字节编码(最有可能),此字符将由十六进制值为0xE1的字节表示,二进制值为

11100001
Run Code Online (Sandbox Code Playgroud)

根据UTF-8编码规则,我们看到此字节属于该类别

1110zzzz
Run Code Online (Sandbox Code Playgroud)

这是在代码点范围U + 0800到U + FFFF中编码单个字符的正好三个字节中的第一个.但是,在您的情况下,在此之后不再有字节,或者如果它们不满足UTF-8编码限制.

因此,浏览器确定存在格式错误的字节序列并改为显示问号.