标签: unicode-normalization

在 PHP 中,如何处理 HFS+ 与其他地方编码文件名的差异?

我正在创建一个非常简单的文件搜索,其中搜索数据库是一个文本文件,每行一个文件名。数据库是使用 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";\n
Run 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$\n
Run Code Online (Sandbox Code Playgroud)\n\n

在 Linux 上运行时(或在 MacOSX 上安装 nfs …

php unicode macos utf-8 unicode-normalization

1
推荐指数
1
解决办法
2129
查看次数

OS X文件名中的变音符号(perl)

我在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 macos perl diacritics unicode-normalization

1
推荐指数
1
解决办法
835
查看次数

规范的Unicode字符串形式

我有一个Unicode字符串编码,比如说UTF8.Unicode中的一个字符串可以包含少量字节表示.我想知道,是否有任何或可以创建任何规范(标准化)形式的Unicode字符串 - 所以我们可以例如比较这样的字符串memcmp(3)等.例如ICU或任何其他C/C++库可以做到吗?

c c++ unicode collation unicode-normalization

1
推荐指数
1
解决办法
1381
查看次数

将韩文音节分解为字母(日语)

我正在开发一个处理韩语句子的程序,我需要一种将音节或字母分解为字母的方法。对于不了解韩文的人来说,一个音节由2-4个字母(jamo)组成,创建了数千种不同的组合。我想做的就是将这些音节分解成组成它的字母。

我可以通过将其Unicode值与该范围内的关联字母进行比较来获得第一个字母,即以x字母开头的音节在y范围内。但是,我不知所措,无法找到其余的信件。

这是一个包含韩文音节的Unicode值的表:http : //jrgraphix.net/r/Unicode/AC00-D7AF

java unicode character unicode-normalization

1
推荐指数
2
解决办法
998
查看次数

Python字符串中特殊字符存储不一致

版本是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)

python string unicode-normalization python-3.x python-3.7

1
推荐指数
1
解决办法
58
查看次数

规范化字符串会得到与规范化单个字素簇相同的结果吗?

对字符串执行 Unicode 规范化(假设没有孤立的组合字符)的结果是否与将字符串拆分为字素簇、单独规范化每个簇然后连接规范化的字素簇的结果相同?(如果是这样,这是否仅适用于规范化形式的子集?)

提出这个问题主要是出于对 Unicode 如何工作以及弄清楚可能存在哪些潜在边缘情况的兴趣,而不是作为具体应用程序的一部分。

unicode unicode-normalization grapheme-cluster

1
推荐指数
1
解决办法
179
查看次数

在 Swift 中规范化(组合和分解)utf8 字符串

Unicode 字符串中带有重音符号的字符可以用“短”(组合)和“长”(分解)格式表示。这意味着在 Xcode 中,字符串a的长度为 8,而字符串b的长度为 10,即使它们看起来相同:

\n
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)\n
Run Code Online (Sandbox Code Playgroud)\n

在此输入图像描述

\n

我需要“收缩”字符串以确保它们始终处于较短的“组合”格式。这在 Swift 中是如何完成的?

\n
\n

脚注:我知道可以像这样完全去掉重音(如下)。我不想那样做,我只是想“创作”角色。

\n
let usPosixLocale = Locale(identifier: "en_US_POSIX")\nlet out = "\xce\xb4\xce\xad\xce\xba\xce\xb1".folding(options: [.caseInsensitive, .diacriticInsensitive], locale: usPosixLocale)\n
Run Code Online (Sandbox Code Playgroud)\n

我知道这个.widthInsensitive选项,但文档似乎表明它仅适用于亚洲字符。具体来说,这不适用于组合或分解字符:

\n
let out = a.folding(options: [.widthInsensitive], locale: usPosixLocale)\n
Run Code Online (Sandbox Code Playgroud)\n
\n

更新

\n

这是代码的第二个较长版本,为了清楚起见,它显示了字节差异。

\n
let 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)

string unicode unicode-normalization swift

1
推荐指数
1
解决办法
1323
查看次数

一些烦人的字符没有被 unicodedata 规范化

我有一个如下所示的 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

1
推荐指数
1
解决办法
228
查看次数

如何使用 unicodedata 模块在 Python 3 中处理多字符 Unicode 表情符号?

当我使用表情符号并尝试使用unicodedata模块获取它们的代码点和名称时,我一直遇到多字符表情符号的问题。该模块拒绝让我使用字符串,而是需要字符。我尝试标准化,我尝试在utf-8和中进行编码unicode-escape,并且我一次又一次地研究它,但我没有成功地发现发生了什么!

\n
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))\n
Run Code Online (Sandbox Code Playgroud)\n

虽然是的,上面的代码没有使用该unicodedata模块,但它向您展示了我遇到的问题,无论如何......

\n
 (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\n
Run Code Online (Sandbox Code Playgroud)\n

休息后,不知何故,我无意中成功地将表情符号从 this: 转换\xe2\x9d\xa3\xef\xb8\x8f为 this: …

python unicode unicode-normalization emoji

0
推荐指数
1
解决办法
1042
查看次数