原谅我的新手问题,但为什么要找'?' 或者Mysql中的'2'返回相同的记录?
例如:
假设我有一个名为'slug'的字符串字段的记录,值为'?'.以下SQL返回相同的记录.
SELECT * From articles WHERE slug='2'
SELECT * From articles WHERE slug='?'
Run Code Online (Sandbox Code Playgroud) 我有一个结合了变音符号的UTF8字符串.我想将它与\w正则表达式序列匹配.它匹配具有重音符号的字符,但如果存在组合变音符号的拉丁字符则不匹配.
>>> re.match("a\w\w\wz", u"aoooz", re.UNICODE)
<_sre.SRE_Match object at 0xb7788f38>
>>> print u"ao\u00F3oz"
aoóoz
>>> re.match("a\w\w\wz", u"ao\u00F3oz", re.UNICODE)
<_sre.SRE_Match object at 0xb7788f38>
>>> re.match("a\w\w\wz", u"aoo\u0301oz", re.UNICODE)
>>> print u"aoo\u0301oz"
ao?ooz
Run Code Online (Sandbox Code Playgroud)
(看起来SO降价处理器在上面的组合变音符号有问题,但最后一行有一个)
反正将变音符号与\w?相匹配?我不想规范化文本,因为这个文本来自文件名,我不想要做一个完整的'文件名unicode规范化'.这是Python 2.5.
我正在OS X上进行网站开发,而且我常常发现自己处于将移动网站(运行Linux/LAMP)的某些部分移动到在我自己的机器上运行的开发服务器的情况.一个这样的实例涉及下载图像(用户生成的内容,例如通过ftp下载),以这样或那样的方式处理它们并将它们放回到生产站点上.
涉及的图像文件在Linux机器中创建,其文件名似乎使用NFC分解以UTF-8编码.另一方面,OS X的HFS +文件系统不允许NFC分解的文件名并转换为NFD.但是,一旦我完成并希望上传文件,他们的名字现在将使用NFD分解,因为Linux支持它们.因此,无法在预期的URL访问新上载的(在某些情况下已替换)文件.
我正在寻找一种方法来改变文件的UTF分解(最好)或之后(convmv看起来是一个不错的选择,但我在这个服务器上没有足够的权限,在这种特殊情况下不可能)转移,因为我猜测事先不可能做到这一点.我尝试使用Transmit和rsync进行FTP上传(使用正常使用的部署脚本)无济于事.--iconvrsync中的选项似乎很理想,但不幸的是我运行rsync 2.6.9的服务器无法识别它.
我猜很多人都有类似的问题,我很乐意听到任何解决方案或解决方法!
更新:在这种情况下,我最终将文件rsyncing到运行Ubuntu的虚拟机,在那里运行convmv,然后再次rsyncing到我的登台服务器.虽然这种方法运行得相当好,但有点耗费时间.也许可以在OS X上安装一个ext文件系统,而只是使用原始的NFC分解文件名将文件存储在那里?
另外,为了避免在未来的WordPress安装中出现这些问题,这是我的用例,你可以add_filter('sanitize_file_name', 'remove_accents'); 在上传任何文件之前添加一个简单的,你应该没问题.
我正在尝试从http://dictionary.reference.com/browse/apple?s=t等字典网站下载一些内容
我遇到的问题是原始段落有所有那些波浪线,反向字母等等,所以当我读取本地文件时,我最终会得到像\ x85,\ xa7,\ x8d等那些有趣的转义字符. .
我的问题是,有什么方法可以将所有转义字符转换为各自的UTF-8字符,例如,如果有'à'我如何将其转换为标准'a'?
Python调用代码:
import os
word = 'apple'
os.system(r'wget.lnk --directory-prefix=G:/projects/words/dictionary/urls/ --output-document=G:\projects\words\dictionary\urls/' + word + '-dict.html http://dictionary.reference.com/browse/' + word)
Run Code Online (Sandbox Code Playgroud)
我在Windows 7系统上使用wget-1.11.4-1(不要杀了我的Linux用户,这是客户端的要求),并且用Python 2.6脚本文件启动了wget exe.
我想将英语(i)的"I"的小写字母与土耳其语(i)的"İ"的小写字母相匹配.它们是相同的字形,但它们不匹配.当我做System.out.println("?".toLowerCase());字符i和打印点(此网站不能正确显示)
有没有办法匹配那些?(最好没有硬编码)我想让程序匹配与语言和utf代码无关的相同字形.这可能吗?
我测试了规范化没有成功.
public static void main(String... a) {
String iTurkish = "\u0130";//"?";
String iEnglish = "I";
prin(iTurkish);
prin(iEnglish);
}
private static void prin(String s) {
System.out.print(s);
System.out.print(" - Normalized : " + Normalizer.normalize(s, Normalizer.Form.NFD));
System.out.print(" - lower case: " + s.toLowerCase());
System.out.print(" - Lower case Normalized : " + Normalizer.normalize(s.toLowerCase(), Normalizer.Form.NFD));
System.out.println();
}
Run Code Online (Sandbox Code Playgroud)
结果未在网站中正确显示,但第一行(iTurkish)仍然具有? 接近小写的i.
目的和问题
这将是一个多语言词典.我希望程序能够识别"İFEL"以"if"开头.为了确保它们不区分大小写,我首先将两个文本转换为小写.İFEL成为i(点)fel并且"if"未被识别为其中的一部分
添加对Unicode密码的支持,这是开发人员不应忽视的重要功能.
仍然,在密码中添加对Unicode的支持是一项棘手的工作,因为相同的文本可以在Unicode中以不同的方式编码,并且您不希望阻止人们因此而登录.
假设您将密码存储为UTF-8,并且请注意此问题与Unicode编码无关,而且与Unicode规范化有关.
现在的问题是你应该如何规范化 Unicode数据?
你必须确保你能够比较它.您需要确保在下一个Unicode标准发布时,它不会使您的密码验证无效.
注意:仍然有一些地方可能永远不会使用Unicode密码,但这个问题不是关于为什么或何时使用Unicode密码,而是关于如何以正确的方式实现它们.
是否可以在不使用ICU的情况下实现这一点,例如使用OS进行规范化?
passwords unicode normalization unicode-normalization text-normalization
考虑这个简单的代码:
echo iconv('UTF-8', 'ASCII//TRANSLIT', 'è');
Run Code Online (Sandbox Code Playgroud)
它打印
`e
Run Code Online (Sandbox Code Playgroud)
而不仅仅是
e
Run Code Online (Sandbox Code Playgroud)
你知道我做错了吗?
添加setlocale后没有任何改变
setlocale(LC_COLLATE, 'en_US.utf8');
echo iconv('UTF-8', 'ASCII//TRANSLIT', 'è');
Run Code Online (Sandbox Code Playgroud) 再一次,我对unicode问题非常困惑.我无法弄清楚如何成功使用unicodedata.normalize按预期转换非ASCII字符.例如,我想转换字符串
u"Cœur"
Run Code Online (Sandbox Code Playgroud)
至
u"Coeur"
Run Code Online (Sandbox Code Playgroud)
我很确定unicodedata.normalize是这样做的方法,但我不能让它工作.它只是保持字符串不变.
>>> s = u"Cœur"
>>> unicodedata.normalize('NFKD', s) == s
True
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?
python unicode normalization unicode-normalization python-2.7
Mac通常在HFS +文件系统上运行,该系统规范化路径.也就是说,如果您在其中保存带有重音é的文件(u'\xe9'例如),然后执行a,os.listdir您将看到文件名已转换为u'e\u0301'.这是Python unicodedata模块可以处理的正常unicode NFD规范化.不幸的是,HFS +与NFD并不完全一致,这意味着某些路径不会被标准化,例如u'\ufa1b',尽管它的NFD形式是福的,但不会改变福()u'\u798f'.
那么,如何在Python中进行规范化呢?我可以使用原生API,只要我可以用Python调用它们.
这个问题与文本编辑有关。假设您有一段标准化形式的NFC文本,以及一个指向文本中扩展字素簇边界的光标。您想在光标位置插入另一段文本,并确保生成的文本也在 NFC 中。您还希望将光标移动到紧跟在插入文本之后的第一个字素边界上。
现在,由于连接两个都在 NFC 中的字符串不一定会生成也在 NFC 中的字符串,因此您可能需要修改插入点周围的文本。例如,如果您有一个包含 4 个代码点的字符串,如下所示:
[0] LATIN SMALL LETTER B
[1] LATIN SMALL LETTER E
[2] COMBINING MACRON BELOW
--- Cursor location
[3] LATIN SMALL LETTER A
Run Code Online (Sandbox Code Playgroud)
并且您想{COMBINING ACUTE ACCENT, COMBINING DOT ABOVE}在光标位置插入一个 2-codepoints 字符串。那么结果将是:
[0] LATIN SMALL LETTER B
[1] LATIN SMALL LETTER E WITH ACUTE
[2] COMBINING MACRON BELOW
[3] COMBINING DOT ABOVE
--- Cursor location
[4] LATIN SMALL LETTER A
Run Code Online (Sandbox Code Playgroud)
现在我的问题是:在插入字符串后,您如何确定应该将光标放置在哪个偏移量处,从而使光标在插入的字符串之后结束并位于字素边界上?在这种特殊情况下,在标准化期间,光标位置后面的文本不可能与前面的文本交互。因此,以下示例 Python 代码将起作用:
import unicodedata
def …Run Code Online (Sandbox Code Playgroud)