- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
UTF-16 是一种双字节字符编码。交换两个字节的地址将产生 UTF-16BE 和 UTF-16LE。
但我发现在 Ubuntu gedit
文本编辑器中存在名称 UTF-16 编码,以及 UTF-16BE 和 UTF-16LE。用C测试程序发现我的电脑是little endian,UTF-16被确认为与UTF-16LE相同的编码。
另外:在小端/大端计算机中,一个值(例如整数)有两种字节顺序。小端计算机将在硬件中产生小端值(Java 产生的值除外,它始终形成大端)。
虽然文本在我的小端计算机中可以保存为 UTF-16LE 以及 UTF-16BE,但字符是一个字节一个字节生成的(例如 ASCII 字符串,引用 [3] 和 UTF- 的字节顺序) 16 只是由人类定义的 -- 不是大端机器写入大端 UTF-16 而小端机器写入小端 UTF-16 的现象的结果吗?
câu trả lời hay nhất
“UTF-16 的字节序是计算机的字节顺序吗?”
可以从文件的写入者hoặc读取者的角度来看计算机字节顺序的影响。
如果您正在读取标准格式的文件,那么读取它的机器类型无关紧要。格式应该足够明确,无论阅读机的字节顺序如何,数据仍然可以正确读取。
这并不意味着格式不灵活。使用“UTF-16”(当格式名称中未使用“BE”或“LE”消歧时)定义允许将文件标记为大端或小端。这是通过文件前两个字节中称为“字节顺序标记”(BOM) 的东西完成的:
https://en.wikipedia.org/wiki/Byte_order_mark
BOM 的存在为文件的编写者提供了选择。他们可能会选择为内存中的缓冲区写出最自然的字节顺序,并包含匹配的 BOM。对于其他一些读者来说,这不一定是最有效的格式。但是任何声称支持 UTF-16 的程序都应该能够以任何一种方式处理它。
所以是的——计算机的字节顺序可能会影响 BOM 标记的 UTF-16 文件的字节顺序选择。仍然......一个小端程序完全能够保存文件,将其标记为“UTF-16”并使其成为大端。只要BOM与数据一致,用什么样的机器写入或读取都无所谓。
...如果没有 BOM 怎么办?
这是事情变得有点模糊的地方。
一方面,Unicode RFC 2781和 Unicode FAQ 很清楚。他们说一个既不以0xFF 0xFE
也不以0xFE 0xFF
开头的“UTF-16”格式的文件是interpreted as big endian。 :
the unmarked form uses big-endian byte serialization by default, but may include a byte order mark at the beginning to indicate the actual byte serialization used.
但要知道您是否有 UTF-16-LE、UTF-16-BE 或没有 BOM 的 UTF-16 文件……您需要文件外部的元数据来告诉您它是三者中的哪一个。因为并不总是有地方放置这些数据,所以一些程序最终使用启发式方法。
考虑像 this from Raymond Chen (2007) 这样的东西:
You might decide that programs that generate UTF-16 files without a BOM are broken, but that doesn't mean that they don't exist. For example,
cmd /u /c dir >results.txt
This generates a UTF-16LE file without a BOM.
这是一个有效的 UTF-16LE 文件,但是“UTF-16LE”元标签存储在哪里?有人仅通过称其为 UTF-16 文件而忽略它的可能性有多大?
根据经验,有关于该术语的警告。维基百科 page for UTF-16说:
If the BOM is missing, RFC 2781 says that big-endian encoding should be assumed. (In practice, due to Windows using little-endian order by default, many applications similarly assume little-endian encoding by default.)
"UTF-16" and "UTF-32" encoding names are imprecise: depending of the context, format or protocol, it means UTF-16 and UTF-32 with BOM markers, or UTF-16 and UTF-32 in the host endian without BOM. On Windows, "UTF-16" usually means UTF-16-LE.
Mà còn,Byte-Order-Mark Wikipedia article说:
Clause D98 of conformance (section 3.10) of the Unicode standard states, "The UTF-16 encoding scheme may or may not begin with a BOM. However, when there is no BOM, and in the absence of a higher-level protocol, the byte order of the UTF-16 encoding scheme is big-endian."
Whether or not a higher-level protocol is in force is open to interpretation. Files local to a computer for which the native byte ordering is little-endian, for example, might be argued to be encoded as UTF-16LE implicitly. Therefore, the presumption of big-endian is widely ignored.
When those same files are accessible on the Internet, on the other hand, no such presumption can be made. Searching for 16-bit characters in the ASCII range or just the space character (U+0020) is a method of determining the UTF-16 byte order.
因此,尽管标准没有歧义,但上下文在实践中可能很重要。
正如@rici 指出的那样,该标准已经存在一段时间了。尽管如此,对声称为“UTF-16”的文件进行复查还是值得的。或者甚至考虑是否要避免很多这些问题并采用 UTF-8...
"Should UTF-16 be considered harmful?"
关于c - 在UTF-16、UTF-16BE、UTF-16LE中,UTF-16的字节序是计算机的字节顺序吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36550038/
有没有办法在不进行提交/ check out 的情况下应用差异补丁或类似补丁? 我的情况:我工作时经常在计算机之间切换,我的提交历史记录有一堆“switching machines”消息。 我最初的猜
我的自定义引导加载程序中有代码从地址 0x8E00 处的 512 字节缓冲区复制内存。进入高内存,0x100000和更高。这在某些计算机上运行良好,而在其他计算机上崩溃(我假设是三重故障)。此代码在
服务器有没有办法将一些数据无线无缝地推送到客户端,可能是 Windows(电话)、iPhone、Mac 或 Android 设备,没有任何操作系统集成? 如果是这样,最好的设计模式是什么,最好的技术是
我无法理解hadoop的真正本质。 如果我有足够的资源来购买可以处理PB级数据的 super 计算机,那么为什么我需要Hadoop基础架构来管理如此大的数据? 最佳答案 hadoop的全部目的是能够在
我有一个奇怪的问题,或者我可能无法理解Grails i18n机制的工作原理。 我将以下内容插入到index.gsp文件中: LocaleContextHolder.locale:
我正在尝试为我的小弟弟编写一个简单的程序。他经常在他的电脑后面,但他应该为学校学习简单的算术 :D 我想制作以下程序: 他启动了他的电脑 他需要做一些简单的练习并完成 如果他做对了 x 次,他可以继续
有人能告诉我如何在 diff 主机(计算机)上为 MySQL 数据库做一个简单的数据库备份吗?我正在尝试将我的数据库从一台主机(服务器)移动到一台新主机(服务器) 最佳答案 如果您只是需要在服务器之间
đóng cửa. Câu hỏi này không tuân thủ các nguyên tắc của Stack Overflow. Hiện tại nó không chấp nhận câu trả lời. Các câu hỏi yêu cầu chúng tôi giới thiệu hoặc tìm công cụ, thư viện hoặc tài nguyên yêu thích bên ngoài trang web đều không liên quan đến Stack Overflow vì
我正在尝试让 Android 应用程序使用 USB 电缆与运行 ubuntu 12.04 lts 的 Linux 计算机进行通信。我正在尝试使用 usbdeviceconnection 类,但是当我通
我刚刚使用 docker-toolbox 1.8.2 安装了 docker在 Windows 10 上。 由于由于this issue我不得不使用这些命令重新创建 docker 镜像 docker-m
如何删除处于 GURU_MEDITATION 错误状态的 VirtualBox 计算机?在 VirtualBox 未运行时删除该目录是否足够? 编辑:发布后,我删除了“在文件管理器中显示”导航到的整个
当我们在 Azure 机器学习服务中将模型部署为 ACIWebService 时,不需要指定任何 deployment_target。 根据AzureML documentation对于 azurem
当我们在 Azure 机器学习服务中将模型部署为 ACIWebService 时,不需要指定任何 deployment_target。 根据AzureML documentation对于 azurem
我遇到的主要问题是当我选择 stay 时会发生什么上hand_one ,然后 hit上hand_two . 而不是让我hit or stay上hand_two再次,它让我回到hit or stay上h
我知道我可以使用 putty 来 ssh 进入每台 Linux 机器并更新 CentOS 服务器...但我希望有人能够为我指明正确的方向,告诉我如何通过 PowerShell 或 Windows 中的
在 MIX 计算机中,一个单词由五个字节和一个符号组成。符号在内存中是如何表示的?是另一个字节,所以每个字真的是六个字节吗? 谢谢。 最佳答案 你的问题不是很清楚。体系结构规范未指定实际实现。它仅指定
我是 Python 的初级程序员,我的电脑有一个奇怪的问题。当我的计算机上有一个 .py 文件(包含一个有效的脚本)并双击它打开时,会发生以下情况:程序打开(它是黑屏 View ),但它会在一秒钟内自
我正在尝试在 Windows 上使用 plink 创建到 Linux 机器的隧道,并让转储文件最终出现在 Windows 机器上。看起来 this answer会工作,是我的问题的基础。但是尝试一下并
我想在 Windows 7 和 10 计算机上执行重启,但我首先需要将 Jenkins 节点暂时离线。在执行重启之前,我需要完成所有正在运行的任务。然后我远程登录到服务器并重新启动计算机。然而,在我重
我正在编写一个简单的程序,从 MySQL 数据库中提取计算机名称,然后将这些名称存储到字符串数组列表中(这部分工作正常)。之后,我编写了一个类和一个方法,将字符串作为参数(这将是计算机名称)并尝试对其
Tôi là một lập trình viên xuất sắc, rất giỏi!