我正在创建一个非常简单的文件搜索,其中搜索数据库是一个文本文件,每行一个文件名。数据库是使用 PHP 构建的,并通过 grep 文件(也使用 PHP)找到匹配项。
\n\n这在 Linux 中效果很好,但在使用非 ascii 字符时则不适用于 Mac。看起来 HFS+ (MacOSX) 上的名称编码与 ext3 (Linux) 上的名称编码不同。这是一个 test.php:
\n\n<?php\n$mystring = "abc\xc3\xb3\xc3\xbc\xc3\x9adef\xc3\xa5";\nfile_put_contents($mystring, "");\n$h = dir(\'.\');\n$h->read(); // "."\n$h->read(); // ".."\n$filename = $h->read();\n\nprint "string: $mystring and filename: $filename are ";\n\nif ($mystring == $filename) print "equal\\n";\nelse print "different\\n";\nRun Code Online (Sandbox Code Playgroud)\n\n运行 MacOSX 时:
\n\n$ php test.php\nstring: abc\xc3\xb3\xc3\xbc\xc3\x9adef\xc3\xa5 and filename: abc\xc3\xb3\xc3\xbc\xc3\x9adef\xc3\xa5 are different\n$ php test.php |cat -evt\nstring: abc\xc3\xb3\xc3\xbc?M-^Zdef\xc3\xa5$ and filename: abco?M-^Au?M-^HU?M-^Adefa?M-^J are different$\nRun Code Online (Sandbox Code Playgroud)\n\n在 Linux 上运行时(或在 MacOSX 上安装 nfs …
我在OS X上的文件名中遇到了变形金刚(ü字符)的麻烦.我正在从perl脚本创建目录.从概念上讲,我正在做的是:
$NAME = "abcüabc";
$PATH = "/Applications/MyProgram/".$NAME."/";
system('ditto', '--rsrc', $FROMPATH, $PATH . $FILENAME);
Run Code Online (Sandbox Code Playgroud)
这将创建具有名称的文件夹"/Applications/MyProgram/abs%9Fabc/".
任何人都知道我如何解决这个问题来创建具有正确字符的目录?
我有一个Unicode字符串编码,比如说UTF8.Unicode中的一个字符串可以包含少量字节表示.我想知道,是否有任何或可以创建任何规范(标准化)形式的Unicode字符串 - 所以我们可以例如比较这样的字符串memcmp(3)等.例如ICU或任何其他C/C++库可以做到吗?
我正在开发一个处理韩语句子的程序,我需要一种将音节或字母分解为字母的方法。对于不了解韩文的人来说,一个音节由2-4个字母(jamo)组成,创建了数千种不同的组合。我想做的就是将这些音节分解成组成它的字母。
我可以通过将其Unicode值与该范围内的关联字母进行比较来获得第一个字母,即以x字母开头的音节在y范围内。但是,我不知所措,无法找到其余的信件。
这是一个包含韩文音节的Unicode值的表:http : //jrgraphix.net/r/Unicode/AC00-D7AF
版本是Python 3.7。我刚刚发现python有时会将字符ñ存储在具有多种表示形式的字符串中,而我完全不知道为什么或如何处理它。
我不确定显示此问题的最佳方法,所以我将仅显示一些代码输出。
我有两个字符串s1和s2都设置为相等 'Dan Pen?a'
它们都是字符串类型。
我可以运行代码:
print(s1 == s2) # prints false
print(len(s1)) # prints 8
print(len(s2)) # prints 9
print(type(s1)) # print 'str'
print(type(s2)) # print 'str'
for i in range(len(s1)):
print(s1[i] + ", " + s2[i])
Run Code Online (Sandbox Code Playgroud)
循环的输出为:
D, D
a, a
n, n
,
P, P
e, e
n?, n
a, ~
Run Code Online (Sandbox Code Playgroud)
那么,是否有任何python方法来处理这些不一致问题,或者至少有一些关于python什么时候使用哪种表示形式的规范?
很高兴知道Python为什么会选择以这种方式实现。
编辑:
一个字符串从Django数据库中检索,另一个字符串从解析列表目录调用中的文件名获得的字符串中。
from app.models import Model
from django.core.management.base import BaseCommand
class Command(BaseCommand):
def handle(self, *args, **kwargs):
load_dir = "load_dir_name"
save_dir = "save_dir" …Run Code Online (Sandbox Code Playgroud) 对字符串执行 Unicode 规范化(假设没有孤立的组合字符)的结果是否与将字符串拆分为字素簇、单独规范化每个簇然后连接规范化的字素簇的结果相同?(如果是这样,这是否仅适用于规范化形式的子集?)
提出这个问题主要是出于对 Unicode 如何工作以及弄清楚可能存在哪些潜在边缘情况的兴趣,而不是作为具体应用程序的一部分。
Unicode 字符串中带有重音符号的字符可以用“短”(组合)和“长”(分解)格式表示。这意味着在 Xcode 中,字符串a的长度为 8,而字符串b的长度为 10,即使它们看起来相同:
let a:String = "\xce\xb4\xce\xad\xce\xba\xce\xb1" // 8 bytes\nprint(a.data(using:String.Encoding.utf8)!.count)\n\nlet b:String = "\xce\xb4\xce\xad\xce\xba\xce\xb1" // 10 bytes\nprint(b.data(using:String.Encoding.utf8)!.count)\nRun Code Online (Sandbox Code Playgroud)\n\n我需要“收缩”字符串以确保它们始终处于较短的“组合”格式。这在 Swift 中是如何完成的?
\n脚注:我知道可以像这样完全去掉重音(如下)。我不想那样做,我只是想“创作”角色。
\nlet usPosixLocale = Locale(identifier: "en_US_POSIX")\nlet out = "\xce\xb4\xce\xad\xce\xba\xce\xb1".folding(options: [.caseInsensitive, .diacriticInsensitive], locale: usPosixLocale)\nRun Code Online (Sandbox Code Playgroud)\n我知道这个.widthInsensitive选项,但文档似乎表明它仅适用于亚洲字符。具体来说,这不适用于组合或分解字符:
let out = a.folding(options: [.widthInsensitive], locale: usPosixLocale)\nRun Code Online (Sandbox Code Playgroud)\n更新
\n这是代码的第二个较长版本,为了清楚起见,它显示了字节差异。
\nlet a:String = String(bytes:[206, 180, 206, 173, 206, 186, 206, 177], encoding:.utf8)!\nprint(a, a.data(using:String.Encoding.utf8)!.count)\n\nlet b:String …Run Code Online (Sandbox Code Playgroud) 我有一个如下所示的 python 字符串。该字符串来自一家美国上市公司向 SEC 提交的文件。我试图使用unicodedata.normalise函数从字符串中删除一些烦人的字符,但这并没有删除所有字符。这种行为背后的原因可能是什么?
from unicodedata import normalize
s = 'GTS.Client.Services@JPMChase.com\nFacsimile\nNo.:\xa0 312-233-2266\n\xa0\nJPMorgan Chase Bank,\nN.A., as Administrative Agent\n10 South Dearborn, Floor 7th\nIL1-0010\nChicago, IL 60603-2003\nAttention:\xa0 Hiral Patel\nFacsimile No.:\xa0 312-385-7096\n\xa0\nLadies and Gentlemen:\n\xa0\nReference is made to the\nCredit Agreement, dated as of May\xa07, 2010 (as the same may be amended,\nrestated, supplemented or otherwise modified from time to time, the \x93Credit Agreement\x94), by and among\nHawaiian Electric Industries,\xa0Inc., a Hawaii corporation (the \x93Borrower\x94), the Lenders from time to\ntime party thereto and JPMorgan Chase Bank, …Run Code Online (Sandbox Code Playgroud) python unicode unicode-normalization python-3.x python-unicode
当我使用表情符号并尝试使用unicodedata模块获取它们的代码点和名称时,我一直遇到多字符表情符号的问题。该模块拒绝让我使用字符串,而是需要字符。我尝试标准化,我尝试在utf-8和中进行编码unicode-escape,并且我一次又一次地研究它,但我没有成功地发现发生了什么!
emojis = ["", "", "", "", "\xe2\x9d\xa3\xef\xb8\x8f", "\xe2\x9c\xa8"]\nfor emoji in emojis:\n codepoint: str = hex(ord(emoji))\n filename = \'emoji_u{0}.png\'.format(codepoint[2:])\n print(\'{emoji} ({codepoint}) => {filename}\'.format(emoji=emoji,\n codepoint=codepoint,\n filename=filename))\nRun Code Online (Sandbox Code Playgroud)\n虽然是的,上面的代码没有使用该unicodedata模块,但它向您展示了我遇到的问题,无论如何......
(0x1f496) => emoji_u1f496.png\n (0x1f498) => emoji_u1f498.png\n (0x1f49d) => emoji_u1f49d.png\n (0x1f49e) => emoji_u1f49e.png\nTraceback (most recent call last):\n File "F:/Programming/Languages/Vue.js/lovely/collect.py", line 8, in <module>\n codepoint: str = hex(ord(emoji))\nTypeError: ord() expected a character, but string of length 2 found\nRun Code Online (Sandbox Code Playgroud)\n休息后,不知何故,我无意中成功地将表情符号从 this: 转换\xe2\x9d\xa3\xef\xb8\x8f为 this: …