web-dev-qa-db-ja.com

PythonがUCS-2またはUCS-4でコンパイルされているかどうかを調べる方法は?

タイトルがまさに言っていること。

$ ./configure --help | grep -i ucs
  --enable-unicode[=ucs[24]]

公式ドキュメントを検索して、私はこれを見つけました:

sys.maxunicode:Unicode文字に対してサポートされる最大のコードポイントを示す整数。これのvalueは、Unicode文字がUCS-2またはUCS-4として保存されるかどうかを指定する構成オプションに依存します。

ここで明確ではないのは、UCS-2とUCS-4に対応する値です。

コードは、Python 2.6+。

61

--enable-unicode = ucs4でビルドした場合:

>>> import sys
>>> print sys.maxunicode
1114111

--enable-unicode = ucs2でビルドした場合:

>>> import sys
>>> print sys.maxunicode
65535
120
Stef

UCS-2の場合は0xFFFF(または65535)、UCS-4の場合は0x10FFFF(または1114111)です。

Py_UNICODE
PyUnicode_GetMax(void)
{
#ifdef Py_UNICODE_WIDE
    return 0x10FFFF;
#else
    /* This is actually an illegal character, so it should
       not be passed to unichr. */
    return 0xFFFF;
#endif
}

UCS-4モードの最大文字数は、UTF-16で表現可能な最大値によって定義されます。

19

同じ問題が一度ありました。私のウィキで自分のためにそれを文書化しました

http://arcoleo.org/dsawiki/Wiki.jsp?page=Python%20UTF%20-%20UCS2%20or%20UCS4

私が書いた -

import sys
sys.maxunicode > 65536 and 'UCS4' or 'UCS2'
11
Dave

sysconfig は、Pythonの構成変数からUnicodeサイズを通知します。

Buildflagsは次のようにクエリできます。

Python 2.7:

import sysconfig
sysconfig.get_config_var('Py_UNICODE_SIZE')

Python 2.6:

import distutils
distutils.sysconfig.get_config_var('Py_UNICODE_SIZE')
8
stateoff

私は同じ問題を抱えていて、それを正確に行う半公式のコードを見つけました。同じ問題を抱えている人にとっては興味深いかもしれません: https://bitbucket.org/pypa/wheel/ src/cf4e2d98ecb1f168c50a6de496959b4a10c6b122/wheel/pep425tags.py?at = default&fileviewer = file-view-default#pep425tags.py-83:89

生成されるバイナリファイルの名前を変更するため、pythonがucs-2またはucs-4でコンパイルされているかどうかを確認する必要があるwheelプロジェクトから取得されます。

1
Boris Feld

別の方法は、Unicode配列を作成してitemsizeを調べることです。

_import array
bytes_per_char = array.array('u').itemsize
_

array docs からの引用:

_'u'_タイプコードは、Pythonのユニコード文字に対応しています。狭いUnicodeビルドではこれは2バイトで、広いビルドではこれは4バイトです。

狭いUnicodeビルドと広いUnicodeビルドの区別は、Python 3.3以降、 PEP39 を参照してください。arrayの_'u'_タイプコードは、 Python 4.0。

1
user6758673
0
SilentGhost