gpt4 book ai didi

javascript - 如何确保表单中编码的文本是 utf8

转载 作者:技术小花猫 更新时间:2023-10-29 12:24:40 27 4
gpt4 key购买 nike

我有一个 html 框,用户可以用它输入文本。我想确保在框中输入的所有文本都以 UTF-8 编码或在用户完成键入时转换为 UTF-8。此外,我不太明白在文本框中输入时如何选择各种 UTF 编码。

通常我对以下内容感到好奇:

  • 当用户在文本框中输入内容时,浏览器如何确定要使用的编码?
  • javascript 如何确定 html 文本框中字符串值的编码?
  • 我可以强制浏览器只使用 UTF-8 编码吗?
  • 如何将任意编码编码为 UTF-8?我假设有一个 JavaScript 库可以做到这一点?

** 编辑 **

删除了一些对我的目标来说不必要的问题。

本教程帮助我更好地理解 JavaScript 字符代码,但存在错误并且实际上并未在所有情况下将字符代码转换为 utf-8。 http://www.webtoolkit.info/javascript-base64.html

最佳答案

  • How does a browser determine which encodings to use when a user is typing into a text box?

它使用页面默认解码的编码。根据the spec ,你应该能够用 accept-charset 覆盖它<form> 的属性元素,但 IE 有问题,所以你不应该依赖这个(我看到几个不同的来源描述了几个不同的错误,而且我没有在我面前测试所有相关版本的 IE,所以我'就这样吧)。

  • How can javascript determine the encoding of a string value in an html text box?

JavaScript 中的所有字符串都以 UTF-16 编码。浏览器会将所有内容映射到适用于 JavaScript 的 UTF-16,然后从 UTF-16 映射到页面编码的任何内容。

UTF-16 是一种从 UCS-2 发展而来的编码。最初,人们认为 65,536 个代码点对于所有 Unicode 就足够了,因此 16 位字符编码就足够了。事实证明并非如此,因此字符集扩展到 1,114,112 个代码点。为了保持向后兼容性,16 位字符集中一些未使用的范围被预留给代理对,其中两个 16 位代码单元用于对单个字符进行编码。继续阅读 UTF-16 and UCS-2 on Wikipedia了解详情。

结果是当你有一个字符串 str在 JavaScript 中,str.length不给你字符数,它给你代码单元数,如果该字符不在基本多语言平面内,则可以使用两个代码单元对单个字符进行编码。例如,"abc".length给你 3,但是 "𐤀𐤁𐤂".length给你 6;和 "𐤀𐤁𐤂".substring(0,1)给出看起来像空字符串的内容,因为代理项对的一半无法显示,但该字符串仍包含该无效字符(我不保证这可以跨浏览器工作;我相信删除损坏的字符是可以接受的)。要获得有效字符,您必须使用 "𐤀𐤁𐤂".substring(0,2) .

  • Can I force the browser to only use UTF-8 encoding?

执行此操作的最佳方法是以 UTF-8 格式传送您的页面。确保您的 Web 服务器正在发送适当的 Content-type: text/html; charset=UTF-8标题。您可能还想嵌入 <meta charset="UTF-8">你的 <head> 中的元素元素,对于 Content-Type 的情况设置不正确(例如,如果您的页面是从本地磁盘加载的)。

  • How can I encode arbitrary encodings to UTF-8 I assume there is a JavaScript library for this?

在 JavaScript 中没有太多需要以特定编码对文本进行编码。如果您只是简单地写入 DOM,或者读取或填写表单控件,您应该只使用被视为 UTF-16 代码单元序列的 JavaScript 字符串。 XMLHTTPRequest , 当用于 send(data)通过 POST,将使用 UTF-8(如果你向它传递一个在 <?xml ...> 声明中声明的不同编码的文档,它可能会也可能不会将其转换为 UTF-8,因此为了兼容性,你通常不应该使用任何其他比 UTF-8)。

关于javascript - 如何确保表单中编码的文本是 utf8,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1993833/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com