真的就是亂寫用的筆記

簡單筆記一下。

CPython 當中的字串,基本上就是當成一串 C 的 char[],但是 IronPython 裡頭,字串裡頭的每個字,都是一個 Unicode 字元—IronPython 的字串,其實是用 .Net 裡頭的字串實作的,基本上我們只要把 IronPython 的字串當成 System.String 處理就好。於是我前兩天遇到一個問題:我有一段程式,基本上是要取出一段字串裡頭的每個 char,然後把每個 char 根據一定的規則換掉,在 CPython 裡頭,基本上就像這樣:

length = len(originalString)
for i in range(0, length):
    c = ord(originalString[i])

這樣的程式在 IronPython 裡頭的結果會完全不一樣。同樣呼叫 len(“中文”),在 CPython 裡頭會得到 6,在 IronPython 裡頭會得到 2。要得到跟 CPython 一樣的結果,我們在 IronPython 裡頭,需要先把 Unicode 字串轉成 ASCII 處理,而這時候…看來要用點 .Net 的東西

import clr
clr.AddReference("System")
import System
originalData = System.Text.Encoding.UTF8.GetBytes(originalString)
convertedData = System.Text.Encoding.Convert(System.Text.Encoding.UTF8,
System.Text.Encoding.ASCII, originalData)
length = len(convertedData)

for i in range(0, length):
    c = System.Convert.ToInt32(convertedData[i])

真囉唆。

[Update] 對,Python 3 的字串也都已經換成 Unicode 了,但是手上這些東西要換成 Python 3 還是有點麻煩啊(搔頭)。尤其是我經常會呼叫 PyObjC,而這就會牽涉到 Mac OS X 給的 Python.Framework 裡頭,給的 Python 是那個版本。

9 months ago