.. _beyond2to3:

==========================================
\ :py:mod:`2to3`\ 縺ョ蜈医↓
==========================================
.. |2to3| replace:: :py:mod:`2to3` 

\ |2to3|\ 縺ッ蜆ェ繧後◆繝��繝ォ縺ァ縺吶′縲}ython3 繧サ繝シ繝輔↓縺吶k縺溘a縺ォ縺ッ縲�
繧ゅ≧蟆代@謇九r蜉�縺医k蠢�ヲ√′縺ゅk蝣エ蜷医b縺ゅj縺セ縺吶€�
迚ケ縺ォ蛻カ蠕。髢「菫ゅ〒縺ッ繝舌う繝翫Μ繝��繧ソ繧貞叙繧頑桶縺��エ蜷医↓豕ィ諢上′蠢�ヲ√〒縺吶€�

譁�ュ怜梛�上ヰ繧、繝翫Μ蝙九ョ繝シ繧ソ
++++++++++++++++++++++++++


Python2縺ァ縺ッC險€隱槭°繧峨�莨晉オア繧貞女縺醍カ吶>縺ァ(?)縲∵枚蟄怜梛繝��繧ソ(\ :py:class:`str`\ )縺ィ繝舌う繝亥梛繝��繧ソ(\ :py:class:`bytes`\ )縺ォ縺ッ
譛ャ雉ェ逧�↑驕輔>縺ッ縺ゅj縺セ縺帙s縺ァ縺励◆縲ゅ→縺�≧縺九€― :py:class:`bytes`\ 縺ッ\ :py:class:`str`\ 縺ョ蛻・蜷阪→縺ェ縺」縺ヲ縺�∪縺吶€�
縺セ縺溘€�2byte譁�ュ励r蜿悶j謇ア縺�◆繧√↓縲「nicode蝙九′蟆主�縺輔l縺ヲ縺�∪縺吶€�
unicode蝙九→\ :py:class:`str`\ 蝙九�螟画鋤縺ッencode/decode縺ェ縺ゥ縺ョ繝。繧ス繝�ラ繧剃スソ縺」縺ヲ陦後>縺セ縺吶€�

縺ィ縺薙m縺後€ ̄ython3縺ァ縺ッ
譁�ュ怜�(\ :py:class:`str`\ )縺ッ unicode蝙九�蜷梧э隱槭→縺ェ繧翫∪縺吶€Vnicode譁�ュ怜�繧定。ィ縺吶ヰ繧、繝亥梛繝��繧ソ(\ :py:class:`bytes`\ )縺ッunicode譁�ュ怜�繧弾ncode縺吶k縺薙→縺ァ蠕励i繧後∪縺吶€�
縺セ縺溘€√ヰ繧、繝亥�繧置nicode譁�ュ怜�(\ :py:class:`str`\ )縺ォ螟画鋤縺吶k縺溘a縺ォ縺ッ縲‥ecode繝。繧ス繝�ラ縺ョ蜉ゥ縺代r蛟溘j縺ェ縺代l縺ー縺�¢縺セ縺帙s縲�

.. _python2string:

.. code-block:: python
   :caption: Python縺ァ縺ョ譁�ュ怜梛繝��繧ソ
	     
   >>> ("縺�",u"縺�", r"縺�",b"\xe3\x81\x82")
   ("縺�",u"縺�", r"縺�",b"\xe3\x81\x82")
   ('\xe3\x81\x82', u'\u3042', '\xe3\x81\x82', '\xe3\x81\x82')
   
   >>> s="縺ゅ>縺�"
   s="縺ゅ>縺�"
   >>> type(s)
   type(s)
   <type 'str'>
   >>> u=s.decode('utf-8')
   u=s.decode('utf-8')
   >>> type(u)
   type(u)
   <type 'unicode'>
   >>> u
   u
   u'\u3042\u3044\u3046'
   >>> s
   s
   '\xe3\x81\x82\xe3\x81\x84\xe3\x81\x86'
   >>> 

.. _python3string:

.. code-block:: python3
   :caption: Python縺ァ縺ョ譁�ュ怜梛繝��繧ソ
	     
   >>> ("縺�",u"縺�", r"縺�",b"\xe3\x81\x82")
   ("縺�",u"縺�", r"縺�",b"\xe3\x81\x82")
   ('縺�', '縺�', '縺�', b'\xe3\x81\x82')
   >>>s="縺ゅ>縺�"
   s="縺ゅ>縺�"
   >>> type(s)
   type(s)
   <class 'str'>
   >>> b=s.encode('utf-8')
   b=s.encode('utf-8')
   >>> type(b)
   type(b)
   <class 'bytes'>
   >>> b
   b
   b'\xe3\x81\x82\xe3\x81\x84\xe3\x81\x86'
   >>> 

.. _python23StringTypes:

.. tabularcolumns:: |l|c|c|c|c|c|c|

======== ======== ======== ======== ======== ======== ========
Vers.             python2                     python3 
-------- -------------------------- --------------------------	  
types     encode   decode     [0]    encode   decode    [0] 
======== ======== ======== ======== ======== ======== ======== 
bytes    ->str(b)  ->u      str      **N/A** ->str(u)   int 
str      ->str(b)  -> u     str      ->b      **N/A**    u 
unicode  ->str(b)  -> u       u      ->b      **N/A**    u 
======== ======== ======== ======== ======== ======== ======== 

   
騾壼クク縺ョ譁�ュ怜梛繝��繧ソ縺�縺代r蜿悶j謇ア縺」縺ヲ縺�k髯舌j縺ァ縺ッ縲― :py:mod:`2to3`\ 縺ョ螟画鋤蠕後�繝励Ο繧ー繝ゥ繝�縺ッ蝠城。後↑縺丞虚菴懊☆繧九〒縺励g縺�€ゅ@縺九@Python2縺ァ\ :py:class:`str`\ 蝙九ョ繝シ繧ソ繧箪 :py:class:`bytes`\ 蝙九ョ繝シ繧ソ縺ィ縺励※蜿悶j謇ア縺�◆繧√↓菴ソ縺」縺ヲ縺�k繝励Ο繧ー繝ゥ繝�縺ァ縺ッ縲― :py:mod:`2to3`\ 縺ッ閾ェ蜍募、画鋤繧定。後≧縺薙→縺後〒縺阪∪縺帙s縲�\ :py:class:`str`\ 蝙九ョ繝シ繧ソ縺ィ縺励※蜿悶j謇ア縺�∋縺阪°(縺昴�蝣エ蜷医↓縺ッUnicode蝙�=python3縺ョ\ :py:class:`str`\ 蝙九↓螟画鋤��,\ :py:class:`bytes`\ 蝙九ョ繝シ繧ソ縺ィ縺励※蜿悶j謇ア縺�∋縺阪°(縺昴�蝣エ蜷医↓縺ッPython3縺ァ縺ッ譏守、コ逧�↓\ :py:class:`bytes`\ 蝙九r謖�ョ壹☆繧句ソ�ヲ√′縺ゅk�峨rpython2縺ョ繧ス繝シ繧ケ縺九i閾ェ蜍慕噪縺ォ蛻、譁ュ縺吶k縺薙→縺� \ :py:mod:`2to3`\ 縲€縺ォ縺ッ縺ァ縺阪↑縺�◆繧√〒縺吶€�


py2/p3縺ァ荳。遶九☆繧九◆繧√↓縺ッ縲― :py:class:`bytes`\ 縺ィunicode繧呈�遉コ逧�↓菴ソ縺�€�
\ :py:class:`bytes`\  -> unicode縺ョ譎ゅ↓decode繧偵€「nicode-> \ :py:class:`bytes`\ 縺ョ螟画鋤縺ァencode繧剃スソ縺�→豎コ繧√※縺翫¢縺ー縲�
\ :py:mod:`2to3`\ 縺ッ縺昴l繧帝�シ繧翫↓螟画鋤繧定。後>縺セ縺吶€�
\ :py:mod:`2to3`\ 驕ゥ逕ィ蜑阪↓縺薙l繧貞ョ滓命縺励※縺翫¢縺ー縲√≠縺ィ縺ッ菴募コヲ\ :py:mod:`2to3`\ 繧帝€壹@縺ヲ繧ょ撫鬘檎┌縺��縺壹〒縺吶€�

 * 譁�ュ怜�縺ィ縺励※菴ソ縺��エ蜷医�縲「nicode
 * 繝舌う繝亥�縺ィ縺励※菴ソ縺��エ蜷医�縲― :py:class:`bytes`\ 

:py:mod:`cVXI11`\ 繧Ы :py:mod:`EPICS CA`\ 繝「繧ク繝・繝シ繝ォ縺ァ縺ッpython2/python3縺ョ蜿梧婿繧偵し繝昴�繝医☆繧九◆繧√↓縲√%縺ョ讒倥↑螟画峩繧貞刈縺医※縺�∪縺吶€�
縺セ縺溘€― :py:mod:`cVXI11`\ 繧Ы :py:mod:`EPICS CA`\ 繝「繧ク繝・繝シ繝ォ縺ッsetup 繝��繝ォ繧剃スソ縺」縺歟uild譎ゅ↓\ :py:mod:`2to3`\ 繝��繝ォ繧定�蜍慕噪縺ォ驕ゥ逕ィ縺吶k讒倥↓縺励※縺�∪縺吶€� :py:mod:`urllib`\ 縺ョ\ :py:func:`urlopen`\ 縺ェ縺ゥ縺九i霑斐&繧後k蛟、繧�\ :py:class:`\ :py:class:`bytes`\ `\ 蝙九�繝��繧ソ縺ィ縺ェ縺」縺ヲ縺�∪縺吶�縺ァ縲�
繝�く繧ケ繝医→縺励※蜃ヲ逅�☆繧句燕縺ォ\ :py:meth:`decode`\  繝。繧ス繝�ラ繧剃スソ縺」縺ヲ :py:class:`str`\ 縺ォ螟画鋤縺励※鄂ョ縺阪∪縺励g縺�€�


繝ェ繝�Λ繝ォ縺ェ繝舌う繝亥�陦ィ迴セ (:py:const:`b"abc"`\ 縺ェ縺ゥ�峨�Python2, Python3縺ョ蜿梧婿縺ァ蛻ゥ逕ィ蜿ッ閭ス縺ァ縺吶€�
繝舌う繝亥�縺ィ縺励※蜿悶j謇ア縺�ョ壽焚繝��繧ソ縺ッ縲√%縺ョ陦ィ迴セ縺ォ縺励※鄂ョ縺上%縺ィ縺ァ縲}ython2/python3縺ョ蜿梧婿縺ァ縺サ縺シ蜷後§讒倥↓蜿悶j謇ア縺�%縺ィ縺後〒縺阪∪縺吶€�
繝舌う繝亥�(byte)縺九i1繝舌う繝医�繝��繧ソ繧貞叙繧雁�縺咎圀縺ォ縺ッ縲∵ウィ諢上′蠢�ヲ√〒縺吶€1ython2縺ァ縺ッ[n]繧ェ繝壹Ξ繝シ繧ソ縺ァ1繝舌う繝医�繝��繧ソ繧偵ヰ繧、繝亥�(�拿 :py:class:`str`\ )繧�
蜿悶j蜃コ縺吶%縺ィ縺後〒縺阪∪縺吶€ゅ@縺九@縲}ython3縺ァ縺ッbyte蛻励°繧閏n]繧ェ繝壹Ξ繝シ繧ソ繧剃スソ縺」縺ヲ1繝舌う繝医ョ繝シ繧ソ繧貞叙繧雁�縺吶→縲(nt蝙九�繝��繧ソ縺ィ縺ェ縺」縺ヲ縺励∪縺�∪縺吶€�
荳€譁ケ[n:n+1]縺ァ荳€繝舌う繝亥�縺ョ繝��繧ソ繧貞叙繧雁�縺励◆蝣エ蜷医↓縺ッ縲― :py:class:`bytes`\ 蝙九↓縺ェ縺」縺ヲ縺�∪縺吶€ゅ€€縲€縺薙�讒倥↑蜍穂ス懊�驕輔>繧貞精蜿弱☆繧九◆繧√↓縺ッ縲�
python2縺ァ繧�1繝舌う繝医�繝��繧ソ繧貞叙繧雁�縺吝�エ蜷医↓繧�[n:n+1]繧剃スソ縺」縺ヲ縺翫¥縺ィ縺�≧驟肴�縺悟ソ�ヲ√〒縺吶€�


.. :code: python2
   :caption: python2縺ァ1繝舌う繝医ョ繝シ繧ソ繧貞叙繧雁�縺吶€�

   >>> b=b"abc"
   >>> b[0]
   'a'
   >>> b[0:1]
   'a'


.. :code: python3
   :caption: python3縺ァ1繝舌う繝医ョ繝シ繧ソ繧貞叙繧雁�縺吶€�
	     
   >>> b=b'abc'
   >>> b[0]
   97
   >>> type(b[0])
   <class 'int'>
   >>> b[0:1]
   b'a'
   >>> type(b[0:1])
   <class 'bytes'>

   
縺セ縺溘€}ython2/python3縺ィ繧� bytearray 蝙九r謖√▲縺ヲ縺�∪縺吶€Cytearray蝙九�PY2/PY3縺ァ讎ゅ�蜷後§methods繧呈戟縺」縺ヲ縺�k(萓句、厄シ喞opy,clear,maketrans)縺ョ縺ァ縲�
byte蝙九〒縺ッ縺ェ縺上€|ytearray蝙九r遨肴・オ逧�↓菴ソ縺��繧Qython2/pytho3莠呈鋤縺ィ縺吶k縺溘a縺ォ縺ッ譛牙柑縺ィ閠�∴繧峨l縺セ縺吶€�



open縺ョencoding
----------------

譁�ュ怜梛�十 :py:class:`bytes`\ 蛻励�蜿匁桶縺ァ豕ィ諢上☆縺ケ縺堺コ九→縺励※縲{pen髢「謨ー縺ョpython2/python3縺ァ縺ョ
驕輔>縺後≠繧翫∪縺吶€�

python3縺ォ縺翫>縺ヲ縲∵枚蟄怜梛繝��繧ソ縺ョ繝輔ぃ繧、繝ォ蜈・蜃コ蜉帙〒縺ッ縲∝�蜃コ蜉帙Δ繝シ繝峨′繝�く繧ケ繝医Δ繝シ繝�("r"縺ゅk縺��"w")縺ァ縺ゅk蝣エ蜷医↓縺ッ縲√ヵ繧。繧、繝ォ縺梧悄蠕�☆繧九お繝ウ繧ウ繝シ繝�ぅ繝ウ繧ー縺ク縺ョ螟画鋤縺悟ソ�ヲ√→縺ェ繧翫∪縺吶€�
繝�ヵ繧ゥ繝ォ繝医�繧ィ繝ウ繧ウ繝シ繝�ぅ繝ウ繧ー縺ッ繝励Λ繝�ヨ繝輔か繝シ繝�萓晏ュ倥〒, locale.getpreferredencoding(False) 
縺ョ霑斐☆蛟、縺御スソ繧上l縺セ縺吶€� 繝舌う繝翫Μ繝��繧ソ縺ョ繝輔ぃ繧、繝ォ蜈・蜃コ蜉帙〒縺ッ繝舌う繝翫Μ繝「繝シ繝�("rb",'wb"縺ェ縺ゥ�峨r
菴ソ縺�%縺ィ縺梧耳螂ィ縺輔l縺ヲ縺�∪縺吶€ゅ∪縺溘€√◎縺�@縺ヲ縺翫¢縺ー縲}ython2/python3縺ョ蜿梧婿縺ァ諠ウ螳壹@縺滄€壹j縺ョ
蜍穂ス懊r縺吶k縺ァ縺励g縺�€�

.. _python2open:

.. code-block:: python
   :caption: python2 縺ァ縺ョopen()髢「謨ー縺ョ繝励Ο繝医ち繧、繝�

   >>> help(open)
   open(...)
	     open(name[, mode[, buffering]]) -> file object
    
   #繝�ヵ繧ゥ繝ォ繝医�繧ィ繝ウ繧ウ繝シ繝�ぅ繝ウ繧ー
   >>> locale.getpreferredencoding(False)
   locale.getpreferredencoding(False)
   'US-ASCII'
   

.. _python3open:

.. code-block:: python3
   :caption: python3 縺ァ縺ョopen()髢「謨ー縺ョ繝励Ο繝医ち繧、繝�
	     
   >>> help(open)
   open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None)
       Open file and return a stream.  Raise OSError upon failure.

   #繝�ヵ繧ゥ繝ォ繝医�繧ィ繝ウ繧ウ繝シ繝�ぅ繝ウ繧ー
   >>> locale.getpreferredencoding(False)
   locale.getpreferredencoding(False)
   'UTF-8'



Python2/Python3縺ョ蛻、螳�
==================================

python2/python3縺ョ蜿梧婿縺ォ蟇セ蠢懊☆繧九�繝ュ繧ー繝ゥ繝�繧帝幕逋コ縺吶k縺溘a縺ォ縺ッ縲�
莉雁虚菴應クュ縺ョ迺ー蠅�r蛻、螳壹☆繧句ソ�ヲ√′蜃コ縺ヲ縺阪∪縺吶€ゅ◎縺ョ蝣エ蜷医↓縺ッ谺。縺ョ繧ウ繝シ繝峨r
菴ソ縺��縺瑚憶縺輔◎縺�〒縺吶€�


.. code:: python
   
   import sys
   
   PY3 = sys.version_info > (3,)

縺薙l縺ァ, 螟画焚\ :py:data:`PY3`\ 縺ッpython2縺ァ縺ッ \ :py:const:`False`\ ,python3縺ァ縺ッ縲― :py:const:`True`\ 縺ィ縺ェ縺」縺ヲ縺�∪縺吶€ゅ€€sys.version_info縺ッ2.7莉・髯阪�version_info蝙九�繧ェ繝悶ず繧ァ繧ッ繝医〒縺吶′縲�2.6縺ゅk縺��縺昴l莉・蜑阪�繝舌�繧ク繝ァ繝ウ縺ァ縺ッ縲》uple縺ィ縺ェ縺」縺ヲ縺�∪縺吶€�
縺励°縺励€∽ク願ィ倥�蠑上�縺�★繧後�迺ー蠅�↓縺翫>縺ヲ繧よュ」縺励¥蜍穂ス懊@縺セ縺吶€�