UTF-8、Unicode 标准化表单、BOM

 

关于Dreamweaver制作UTF-8编码网页的测试中提及的疑惑勾选上包括 Unicode 签名(BOM



UTF-8、Unicode 标准化表单、BOM

 

为详细了解,以下内容摘自帮助文档:
若要设置文档编码,请使用默认编码弹出式菜单。
默认编码指定在创建新页面时要使用的编码,以及指定在未指定任何编码的情况下打开一个文档时要使用的编码。有关更多信息,请参见了解文档编码。
如果选择 Unicode (UTF-8) 作为文档编码,则不需要实体编码,因为 UTF-8 可以安全地表示所有字符。如果选择其他文档编码,则可能需要用实体编码来表示某些字符。有关字符实体的更多信息,请参见 http://www.w3.org/TR/REC-html40/sgml/entities.html
如果选择 Unicode (UTF-8) 作为默认编码,请选择一个 Unicode 标准化表单。
有四种 Unicode 标准化表单。最重要的是标准化表单 C,因为它是用于万维网的字符模型的最常用表单。Macromedia 提供其他三种 Unicode 标准化表单作为补充。
Unicode 中,有些字符看上去很相似,但可用不同的方法存储在文档中。例如,“”e 变音符)可表示为单个字符“e 变音符,或两个字符正常拉丁语 e”+“组合变音符Unicode 组合字符是与前一个字符结合使用的字符,因此变音符会显示在拉丁语 e”的上方。这两种形式都显示为相同的印刷样式,但保存在文件中的每种形式是不同的。
标准化是指确保可用不同形式保存的所有字符都使用相同的形式进行保存的过程。即,文档中所有“”字符都保存为单个“e 变音符“e”+“组合变音符,而不是在一个文档中保存为这两种形式。
有关 Unicode 标准化和可以使用的特定表单的更多信息,请参见 Unicode Web 站点,网址是 http://www.unicode.org/reports/tr15
如果选择 Unicode (UTF-8) 作为默认编码,则可以选择包括 Unicode 签名 (BOM)”选项以在文档中包括字节顺序标记 (BOM)
BOM
是位于文本文件开头的 2 4 个字节,可将文件标识为 Unicode,还标识后面字节的字节顺序。由于 UTF-8 没有字节顺序,因此可以选择添加 UTF-8 BOM。对于 UTF-16 UTF-32,这是必需的。
我特意注意了下,相同代码内容的两个文档,使用了BOM的文档字节比未使用的文档字节多3个字节
对在Dreamweaver中遇到的这个问题,说大不大,说小也不小,平时疏忽啊。。。
[
复制此代码]CODE:txt文件默认打开工具是nodepad,另存为utf-8后这个notepad工具会在文件头部强行添加文件utf8 bom。 会破坏文件原有的内容,如果你的文件内容全部是ascii,大可不必另存为utf-8,因为utf-8编码包括了ascii。即使你要存成utf-8也要 存成无bom的格式,可以用UE 11.0做到.

### UTF-8UTF-8 BOM 的区别 UTF-8 是一种广泛使用的字符编码标准,能够表示 Unicode 标准中的所有字符。然而,UTF-8 文件可以有两种形式:带 BOM(Byte Order Mark)和不带 BOM。以下是两者的区别: #### 1. **UTF-8** - UTF-8 是一种无状态的编码方式,通常不包含字节顺序标记(BOM)。 - 对于大多数文本编辑器和编程环境,UTF-8 文件默认是无 BOM 的。 - 在无 BOM 的情况下,文件开头没有特殊的字节序列来标识其为 UTF-8 编码[^1]。 #### 2. **UTF-8 BOM** - UTF-8 BOM 文件在文件开头包含一个特殊的字节序列 `EF BB BF`,用于标识该文件使用 UTF-8 编码。 - 某些文本编辑器或程序依赖 BOM 来自动检测文件的编码格式。 - 然而,BOM 可能会导致某些程序解析文件时出现问题,例如在 Linux 系统中,某些工具可能会将 BOM 视为文件内容的一部分[^1]。 ### 在 Qt 编辑器中设置字符集为 UTF-8UTF-8 BOM #### 手动设置文件编码 在 Qt Creator 中,可以通过以下方法手动设置文件编码为 UTF-8UTF-8 BOM- 打开文件后,在右下角的状态栏中找到当前文件的编码信息。 - 点击编码信息(如 "UTF-8" 或 "GBK"),然后择 "Recode..."。 - 在弹出的对话框中择目标编码为 "UTF-8" 或 "UTF-8 with BOM",并点击确认以应用更改[^3]。 #### 使用代码设置全局编码 可以通过代码确保字符串处理时使用 UTF-8 编码: ```cpp #include <QTextCodec> QTextCodec::setCodecForTr(QTextCodec::codecForName("UTF-8")); // 设置翻译时使用的编码[^2] QTextCodec::setCodecForLocale(QTextCodec::codecForName("UTF-8")); // 设置系统区域编码 QTextCodec::setCodecForCStrings(QTextCodec::codecForName("UTF-8")); // 设置 C 风格字符串编码[^2] ``` #### 转换文件为 UTF-8UTF-8 BOM 以下是一个示例代码,展示如何将文件转换为 UTF-8UTF-8 BOM: ```cpp #include <QFile> #include <QTextStream> #include <QTextCodec> void convertFileToUtf8(const QString &filePath, bool withBom) { QFile file(filePath); if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) { qWarning() << "无法打开文件:" << filePath; return; } QTextStream in(&file); in.setCodec(QTextCodec::codecForName("UTF-8")); // 尝试以 UTF-8 读取文件 QString content = in.readAll(); file.close(); QFile utf8File(filePath + ".utf8"); if (!utf8File.open(QIODevice::WriteOnly | QIODevice::Text)) { qWarning() << "无法保存 UTF-8 文件:" << filePath + ".utf8"; return; } if (withBom) { QByteArray bom = {0xEF, 0xBB, 0xBF}; utf8File.write(bom); // 写入 BOM 字节 } QTextStream out(&utf8File); out.setCodec(QTextCodec::codecForName("UTF-8")); // 保存为 UTF-8 编码 out << content; utf8File.close(); } ``` ### 注意事项 - 如果文件需要跨平台使用,建议尽量避免使用 BOM,因为某些工具可能无法正确处理 BOM- 在 Qt 中,确保所有字符串操作均使用 UTF-8 编码,可以有效避免多语言环境下的乱码问题[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值