问题标签 [utf-16]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
.net - 将 XML 插入 SQL Server 时如何解决“无法切换编码”错误
我正在尝试插入 XML 列(SQL SERVER 2008 R2),但服务器抱怨:
System.Data.SqlClient.SqlException (0x80131904):
XML解析:第1行,字符39,无法切换编码
我发现 XML 列必须是 UTF-16 才能使插入成功。
我正在使用的代码是:
如何将对象序列化为 UTF-8 字符串?
编辑:好的,很抱歉混淆 - 字符串需要采用 UTF-8 格式。你是对的 - 默认情况下它是 UTF-16,如果我尝试插入 UTF-8,它就会通过。所以问题是如何序列化成UTF-8。
例子
这会在尝试插入 SQL Server 时导致错误:
这不会:
更新
我发现 SQL Server 2008 的Xml
列类型何时需要 utf-8,以及当encoding
您尝试插入的 xml 规范的属性中的 utf-16 时:
当您要添加时,请utf-8
向 SQL 命令添加参数,如下所示:
如果您尝试encoding=utf-16
在上一行中添加 xmlValueToAdd ,则会在插入时产生错误。此外,这VarChar
意味着无法识别国家字符(它们变成问号)。
要将 utf-16 添加到 db,请使用SqlDbType.NVarChar
或SqlDbType.Xml
在前面的示例中,或者根本不指定类型:
sqlite - SQLite - 将特殊符号(商标,...)插入表中
如何在 SQLite 表中插入商标等特殊符号?我尝试使用 PRAGMA encoding = "UTF-16" 没有效果:(
c - UTF-16 解码器未按预期工作
我的 Unicode 库中有一部分将 UTF-16 解码为原始 Unicode 代码点。但是,它没有按预期工作。
这是代码的相关部分(省略 UTF-8 和字符串操作):
它是如何工作的?
string
是一个保存 32 位值的结构,适用string16
于 16 位值,如 UTF-16。upush
所做的只是将一个完整的 Unicode 代码点添加到 a中,并string
根据需要重新分配内存。
u16tou
是我关注的部分。它遍历string16
,正常传递非代理值,并将代理对转换为完整的代码点。错误放置的代理将被忽略。
一对中的第一个代理将其最低 10 位向左移动 10 位,从而形成最终代码点的高 10 位。另一个代理将其最低 10 位添加到最后,然后将其附加到字符串中。
问题?
让我们试试最高的代码点,好吗?
U+10FFFD
,最后一个有效的 Unicode 代码点,被编码为0xDBFF 0xDFFD
UTF-16。让我们尝试解码。
使用utoc
(未显示;我知道它正在工作(见下文))函数将其转换回 UTF-8char *
以进行打印,我可以在终端中看到我得到了U+0FFFFD
,而不是U+10FFFD
结果。
在计算器
在gcalctool中手动进行所有转换会导致相同的错误答案。所以我的语法本身没有错,但算法错了。该算法对我来说似乎是正确的,但它以错误的答案结束。
我究竟做错了什么?
html - 我应该从 UTF-8 更改为 UTF-16 以适应我的 HTML 中的中文字符吗?
我正在使用 ASP.NET MVC、MS SQL 和 IIS。我有一些用户在他们的个人资料信息中使用了汉字。但是,当我显示此信息时,显示为æŽå¼·è¯
但它们在我的数据库中是正确的。目前,我的 HTML 页面的 UTF 设置为 UTF-8。我应该将其更改为 UTF-16 吗?我知道这可能会带来一些问题,但我的选择是什么?
git - git gui - 可以显示 UTF16 吗?
有没有办法以某种方式git gui
显示和显示 UTF16 文件的差异?
我找到了一些信息,但这主要是指命令行而不是 gui。
java - 为什么 Java char 原语会占用 2 个字节的内存?
为什么 Java char 原始数据类型是 2 个字节,而 C 是 1 个字节,有什么理由吗?
谢谢
javascript - Javascript 和 HTML:将文件保存为没有 BOM 的 UTF-8
我正在尝试编写一个仅 MSIE 的 HTML 页面(我将其称为“标题页面”),它允许某人通过单击按钮来保存生成的 HTML 网页(我将其称为“新页面”)。
我发现出现的“另存为”对话框不允许将“新页面”保存为没有 BOM 的 UTF-8。相反,它被保存为 Unicode(UTF-8),而浏览器又将其确定为 UTF-16。以下是“标题页”的示例代码:
我用http://web-sniffer.net/检查了“新文件”,它告诉我“新文件”是以这种方式保存的:
我能做些什么来阻止它把“新页面”保存为 UTF-16 吗?还是与代码无关?
此外,“另存为”对话框中有一个下拉菜单,据说可以让我更改字符编码,但真正做的只是保存“标题页面”而不是“新页面”。
base64 - 高效的二进制到字符串格式(如 base64,但适用于 UTF8/UTF16)?
我有很多二进制数据,从 16 到 4096 字节不等,它们需要存储到数据库中,并且应该很容易作为一个单元进行比较(例如,只有长度匹配且所有字节匹配的两束数据批)。字符串对此很好,但是由于字符编码/重新解释问题,盲目地将二进制数据转换为字符串很容易引起问题。
在 7 位 ASCII 为标准的时代,Base64 是存储字符串的常用方法;它的 33% 空间损失有点烦人,但并不可怕。不幸的是,如果使用 UTF-16,空间损失为 166%(8 字节存储 3),这看起来很恶心。
是否有任何通用的存储方法可以将二进制数据存储在有效的 Unicode 字符串中,这样可以提高 UTF-16 的效率(希望在 UTF-8 中不会太糟糕)?base-32768 编码将 240 位存储在 16 个字符中,这将占用 32 个字节的 UTF-16 或 48 个字节的 UTF-8。相比之下,base64 编码将使用 40 个字符,这将占用 80 个字节的 UTF-16 或 40 个字节的 UTF-8。一种设计为在 UTF-8 或 UTF-16 中占用相同空间的方法可能会将 48 位存储在三个字符中,而在 UTF-8 或 UTF-16 中将占用 8 个字节,因此将 240 位存储在 UTF-8 或 UTF-16 中的 40 个字节中-8 或 UTF-16。
有这样的标准吗?
c++ - Microsoft 如何处理 UTF-16 在其 C++ 标准库实现中是可变长度编码这一事实
标准中间接禁止使用可变长度编码。
所以我有几个问题:
标准的以下部分如何处理?
17.3.2.1.3.3 宽字符序列
宽字符序列是可以声明为 TA[N] 的数组对象 (8.3.4) A,其中 T 是 wchar_t 类型 (3.9.1),可选地由 const 或 volatile 的任意组合限定。数组的初始元素具有定义的内容,直到并包括由某个谓词确定的元素。一个字符序列可以由一个指针值 S 来指定,该指针值指定它的第一个元素。
NTWCS 的长度是终止空宽字符之前的元素数。空 NTWCS 的长度为零。
问题:
basic_string<wchar_t>
- 如何
operator[]
实现以及它返回什么?- 标准:
If pos < size(), returns data()[pos]. Otherwise, if pos == size(), the const version returns charT(). Otherwise, the behavior is undefined.
- 标准:
- 是否
size()
返回元素的数量或字符串的长度?- 标准:
Returns: a count of the number of char-like objects currently in the string.
- 标准:
- 如何
resize()
工作?- 与标准无关,它的作用是什么
- 中的职位
insert()
,erase()
以及其他职位是如何处理的?
cwctype
- 几乎这里的一切。如何处理变量编码?
cwchar
getwchar()
显然不能返回整个平台字符,那么这是如何工作的呢?
加上所有其余的字符功能(主题相同)。
编辑:我将开放赏金以获得一些确认。我想得到一些明确的答案,或者至少更清楚地分配选票。
编辑:这开始变得毫无意义。这充满了完全矛盾的答案。你们中的一些人谈论外部编码(我不在乎那些,UTF-8 编码的一旦读入字符串后仍将存储为 UTF-16,输出相同),其余的只是相互矛盾。:-/
ruby-on-rails - Ruby on Rails 和 utf-16
我有一个翻译脚本,允许翻译人员提交阿拉伯语翻译,但出于某种原因,Ruby 不喜欢这种编码。有没有办法将提交的文本编码为 utf-16?