问题标签 [unicode-normalization]
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.
unicode - 如何使 sqlite 对查询使用 unicode 等效性
Sqlite 似乎按代码点比较 unicode 字符串,而不是使用 unicode 等价。我需要 sqlite 使用规范的 unicode 等价。有没有办法做到这一点?
我正在使用 sqlite 3.7.13
unicode - 西里尔字母 'С' 和拉丁文 'C' 的 Unicode 比较
我有一个混合使用 unicode 字符 \u0421、'С' 和 \u0043、'C' 的数据集。是否存在某种认为这两个字符相同的 unicode 比较?到目前为止,我已经尝试了几种 ICU 排序规则,包括俄罗斯的排序规则。
java - Java 6 和 7 之间的 NFC 规范化语义是否发生了变化?
unicode 字符U+FA8E CJK COMPATIBILITY IDEOGRAPH-FA8E
是映射到的兼容性字符U+641C [CJK Unified Ideographs]
。在 Java 6NFC
规范化中留下了它U+FA8E
,而在 Java 7 中它确实将其分解为U+641C
?
运行这个小片段时:
在 Java 6(Sun/Oracle 和 OpenJDK 的最新版本)中:
在 Java 7(Sun/Oracle 和 OpenJDK 的最新版本)中:
所以我的问题是,为什么会发生这种变化?
阅读UNICODE NORMALIZATION FORMS似乎 NFC 不应该使用兼容性映射分解字符?
但 Oracle 和 OpenJDK 都已将其转换为 Java 7 的事实让我感到奇怪。
perl - Unicode 规范化 - 文本文件中的文件名与文件系统上的文件名
刚开始研究一个 perl 应用程序。需要一些建议如何(正确)处理unicode filenames
vs filenames in the file content
- 便携方式。
这里有几个系统,Windows 和 Unix 世界使用不同的 unicode 编码(Unixes utf8,Windows - 不知道),但是 Linux 和 Mac OS X 不同的文件名 unicode 规范化。(OS X - 强制 NFD,Linux - “通常” NFC)。
我已经读过的所有建议都说:(总是在应用程序边界规范化 unicode 数据) - 但问题是 - 什么是正确的 - 最便携的方法?
问题在于,OS X(创建文本文件时)使用 NFC 获取内容。我不知道其他系统使用什么。
所以问题是,制作便携式应用程序和处理文件名的正确方法是:
- 开放目录/读取目录
- glob 和类似的“文件操作”
- 文本文件(将包含文件名的内容)
- perl 内部...
- 其他?
何时何地进行标准化?如何保存内容中包含文件名的 utf8 文本文件?
我知道,StacOverflow 中已经有许多与 perl-unicode 相关的问题。我可能挖掘了其中的大部分——但仍然不明白处理上述问题列表的“推荐”做法是什么。
是否需要制作模块来处理特定的操作系统差异?或者这里已经有 CPAN 模块处理文件操作中的操作系统差异?)
有人可以通过推荐的做法向我指出一些好的资源吗?还是像我现在想的那样简单得多?
c++ - strcoll 中的 Unicode 规范化
规范等效的 Unicode 字符串是否相等?有时。
这个程序在我的 Cygwin 化的 Windows 机器上导致了 WIN,而在我可以接触到的每个 Linux 系统上都失败了。
这是预期的行为吗?是否有产生 WIN 的 Linux 系统?Mac OS X 呢?自由BSD?
我知道我可以规范化并与第三方库进行规范等效。我对 UTF-8 语言环境的标准排序规则感兴趣。
这个问题是受这个启发的。
r - R中的Unicode规范化(形式C):将所有带有重音符号的字符转换为它们的一个unicode字符形式?
在 Unicode 中,带重音的字母可以用两种方式表示:重音字母本身,以及裸字母加重音的组合。例如,é (+U00E9) 和 e´ (+U0065 +U0301) 通常以相同的方式显示。
R 呈现以下内容(版本 3.0.2,Mac OS 10.7.5):
但是,当然:
R 中是否有一个函数可以将两个 unicode 字符字母转换为它们的一个字符形式?特别是,在这里它会崩溃"\u0065\u0301"
成"\u00e9"
.
这对于处理大量字符串非常方便。此外,单字符形式可以很容易地通过iconv
- 至少对于通常的 Latin1 字符 - 转换为其他编码 - 并且由plot
.
提前非常感谢。
python - 比较两个文本
为了验证迁移工具,我想比较两个文本,一个是源 A,另一个来自目标工具 B。要填充 B,我使用的是基于 JSON 的 reste API。B 对我不确切知道的文本应用了一些“转换”。
这是我正在使用的代码片段:
结果:
因此,我正在寻找一种工具来对处理重音 <=>html 实体、空格等的那些文本进行哈希处理。
html - HTML:相同的文件,不同的结果。Yahoo vs Dreamweaver 与 Yahoo Store 标签
我正在使用雅虎商店标签建立商店。雅虎商店标签看起来很像 HTML 注释:
一旦它在服务器上,它应该拉入产品 ID 的相关字段。这是奇怪的部分。当我在 Dreamweaver 中创建页面时,Yahoo 商店标签不起作用。如果我在 Yahoo Webhosting 文件管理器中创建 HTML 页面,并从我的 Dreamweaver 文件中粘贴完全相同的代码(doctype、html 标签等),它确实可以工作。我什至可以下载在 Yahoo 中创建的文件,在 Dreamweaver 中对其进行编辑并将其发送回服务器,它就可以工作了!
那么在 Dreamweaver 中创建文件的方式是否存在问题?我尝试使用每种不同的 Unicode 规范化形式创建一个文件,但它们都不起作用。当 Yahoo 创建 Dreamweaver 没有的文件时,它在做什么?
这是在 Yahoo 文件管理器中创建的工作页面(价格为 24.95 美元): http: //fullsteampress.com/pricetest2.html
这是在 Dreamweaver 中创建的同一页面:http: //fullsteampress.com/pricetest.html
这是两个页面中使用的完整 HTML:
附加信息:
在我的电脑上,dreamweaver 中创建的文件似乎是 374 字节,而雅虎文件管理器中创建的文件是 670 字节。即使我在文本编辑器中打开它们,内容(我的 HTML)也是相同的。
c# - 如何在请求验证进入 MVC 4 之前清理输入?
我有我的应用程序,安全测试团队报告了一个关于用户可能从我们的表单输入中注入恶意代码的错误。该应用程序是在 ASP.NET MVC4、.NET 4.5 和 EF 5 中开发的。
正在测试的攻击就像输入任何通常的 html 一样,但我的同事没有使用常规的 < 或 >,而是使用 < 和 >(之前字符的全角 unicode 版本:此处为完整列表)。MVC 让这些字符通过,然后,以某种方式,ORM 删除了字符的“宽”部分,并将标准和普通字符留在数据库中。不用说,如果在视图的输出中没有正确编码,这些字符的检索和渲染可能会导致 XSS 漏洞。
我现在需要的是一种对应用程序中以任何形式提交的所有字符串进行清理和执行 Normalize() 的方法。有人告诉我创建一个自定义模型绑定器,但是在 BindModel 方法中我找不到修改字段的位置,所以稍后框架可以识别清理后的值并识别注入。
任何建议将不胜感激。
python - 当我使用 Python 2.7 将 unicode 字符插入 sqlite3 数据库时,为什么会得到额外的转义字符?
我查询一个 API 并获得一个具有以下值的 json blob:
(当然,正确的值是“Some Wéirdness”)
我将该值与其他一些东西一起添加到我想要添加到我的 sqlite3 数据库的字段列表中。该列表如下所示:
我注意到我们已经经历了从 \x00e9 到 \xe9 的转换,我还不确定为什么会这样,但我希望这没关系......这只是一个不同的 unicode 编码。
在尝试插入 sqlite 表之前,我将列表“字符串化”(参见下面的函数)并将其设为元组:
然后我进行插入:
当我稍后使用 SELECT 语句检索它时,该值添加了一个额外的转义(反斜杠)字符:
首先,我已经知道我不应该在 sqlite 中使用字符串插值。但是,当每条记录的字段数可能随时间变化时,我无法弄清楚如何使用?字段。(如果你知道更好的方法来做到这一点,我会全力以赴,但这可能是另一篇文章。)
为了排除故障,我打印了格式化的插入 sql 语句,我只看到一个反斜杠:
这与我在上面的列表中的显示方式相同,所以我很困惑。也许这被解释为带有必须转义的反斜杠的字符串,并且 xe9 只是被视为 ascii 文本。这是我用来准备插入列表的 stringatize 函数:
我很感激你在这方面对我的任何想法。目标是最终将此值转储到 Excel 工作表中,该工作表可以使用 Unicode,因此应该正确显示该值。
编辑:响应@CL 的询问,我尝试从我的字符串化函数中删除“编码”行。
现在结束如下:
新的 sql 看起来像这样(下面是我尝试执行它时得到的回溯):
我的意思是将该数字转换为字符串。我怀疑它与我正在做的 repr(my_tuple) 和 u'' 实际上不再象征着 unicode 有关。