小编Rip*_*Doc的帖子

Mac OS X中文件系统的Unicode编码在Python中不正确?

在OS X和Python中对Unicode文件名进行了一些努力.我试图在代码中稍后使用文件名作为正则表达式的输入,但文件名中使用的编码似乎与sys.getfilesystemencoding()告诉我的不同.请使用以下代码:

#!/usr/bin/env python
# coding=utf-8

import sys,os
print sys.getfilesystemencoding()

p = u'/temp/s/'
s = u'åäö'
print 's', [ord(c) for c in s], s
s2 = s.encode(sys.getfilesystemencoding())
print 's2', [ord(c) for c in s2], s2
os.mkdir(p+s)
for d in os.listdir(p):
  print 'dir', [ord(c) for c in d], d
Run Code Online (Sandbox Code Playgroud)

它输出以下内容:

utf-8
s [229, 228, 246] åäö
s2 [195, 165, 195, 164, 195, 182] åäö
dir [97, 778, 97, 776, 111, 776] åäö
Run Code Online (Sandbox Code Playgroud)

因此,文件系统编码是utf-8,但是当我使用它编码我的文件名时,它与我创建具有相同字符串的目录名称不同.我希望当我使用我的字符串åäö创建一个目录,然后读回它的名字时,它应该使用相同的代码,就像我直接应用编码一样.

如果我们查看代码点97,778,97,776,111,776,它基本上是加上变音符号的ASCII字符,例如o +¨=ö,这使得它成为两个字符,而不是一个字符.如何避免这种差异,Python中是否存在一种与OS X匹配此行为的编码方案,为什么getfilesystemencoding()不能给我正确的结果?

还是我搞砸了?

python filesystems unicode macos file-io

16
推荐指数
2
解决办法
7375
查看次数

SQL:选择包含确切给定成员的集合

我确信有一个适当的词我不记得,但问题很容易描述:我有一个表组成员,这是组和成员之间的简单关系:

id | groupid | memberid
1  | g1      | m1
2  | g1      | m2
3  | g2      | m1
4  | g2      | m2
5  | g2      | m3
Run Code Online (Sandbox Code Playgroud)

上面描述了两组,一组是m1和m2,一组是m1,m2和m3.如果我想选择有成员m1,m2但没有其他成员的groupids,我该怎么做?我尝试过的方法也会返回g2,因为m1和m2是它们的子集.

更新:哇,一些很棒的答案!让我首先澄清一下我的问题 - 我希望能够选择与给定成员m1和m2完全匹配的组.因此,如果该组还包含比m1和m2更多的成员,则它不应该匹配,并且如果该组包含少于成员m1和m2,则它不应该匹配.

sql

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

标签 统计

file-io ×1

filesystems ×1

macos ×1

python ×1

sql ×1

unicode ×1