具有 html 个实体的解码字符串不等于字符串文字

Decoded string with html entities does not equal string literal

我尝试实施 this thread 中提出的解决方案来解码具有 html 个实体的字符串,例如“foo bar”到“foo bar”。

从视觉上看,它似乎有效。但是我的快速 Jest 测试失败了:

Expected: "foobar"
Received: "foobar"

  3 | describe('encryption/decodeHtml', () => {
  4 |   it.each([['foo bar', 'foo bar'], ['foo­bar', 'foobar'], ['foo&bar', 'foo&bar']])('should decode html entities', (val, expected) => {
> 5 |     expect(decodeHtml(val)).toEqual(expected);
    |                             ^
  6 |   })
  7 | });
  8 |

快速 Object.is(decodeHtml(' '), ' ') 也会产生 false.

JS-Strings 有什么我不熟悉的地方吗?

正如评论中Andreas所指出的,我忘记了字符串的字节表示。

看这个例子:

toBytes('foo bar') -> Uint8Array(7) [102, 111, 111, 32, 98, 97, 114]
toBytes(decodeHtml('foo bar')) -> Uint8Array(8) [102, 111, 111, 194, 160, 98, 97, 114]

事后看来,这很明显,因为中断 space 和非中断 space 是(当然)不同的字符。