繁体   English   中英

创建无效的 UTF8 字符串

[英]Create invalid UTF8 string

是否可以使用 Javascript 创建无效的 UTF8 字符串?

我找到的每个解决方案都依赖String.fromCharCode ,它生成undefined而不是无效的字符串。 我已经看到提到由格式错误的 UTF8 字符串(即https://developer.mozilla.org/en-US/docs/Web/API/WebSocket#send() )生成的错误,但我无法弄清楚您将如何实际创建一个。

JavaScript 中的字符串是 UTF-16 代码单元的计数序列。 代码单元表示 Unicode 代码点有一个隐含的约定。 即便如此,也可以表示任何 UTF-16 代码单元序列——甚至是未配对的代理。

我发现String.fromCharCode(0xd801)返回替换字符,这看起来很合理(而不是undefined )。 任何文本函数都可能这样做,但出于效率原因,我确信许多文本操作只会传递无效序列,除非操作需要将它们解释为代码点。

创建此类字符串的最简单方法是使用字符串文字。 例如, "\? \?""\?""\?"而不是有效的"\?\?"

"\? \?".replace(" ","")实际上确实返回了"\?\?" ( "🚲" ) 但我认为你不应该指望来自不是一个字符串的任何好处Unicode 代码点的有效 UTF-16 编码。

使用 JavaScript 生成无效 UTF-8 字符串的一种方法是采用表情符号并删除最后一个字节。

例如,这将是一个无效的 UTF-8 字符串:

const invalidUtf8 = '🐶🐶🐶'.substr(0,5);

根据这个答案

UTF-8是Unicode的一种编码,可以表示人类历史记录中存在的几乎每个字符和字形,因此在某种程度上没有“无效”的UTF-8字符。

所以, ,这是不可能产生无效的UTF-8字符。 每个字符都是有效的UTF-8。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM