from ctypes import cdll from ctypes import create_string_buffer BLOCK_SIZE = 1024 def conv(srcText, srcCodePage, dstCodePage): dstBufs = [] dstBuf = create_string_buffer(BLOCK_SIZE * 4) srcPos = 0 srcMax = len(srcText) while srcPos < srcMax: srcBlock = srcText[srcPos:srcPos+BLOCK_SIZE] dstLen = cdll.yconv.conv(srcCodePage, srcBlock, len(srcBlock), dstCodePage, dstBuf, len(dstBuf)) dstBufs.append(dstBuf[:dstLen]) srcPos += len(srcBlock) return "".join(dstBufs)