将任意 unicode 写入文件
Writing arbitrary unicode to file
我一直在尝试将任意字符(实际上是任何类型的字符)输出到生成的文件中。考虑下面的起始代码(可能会写得更好,但只是想现在就开始工作)。
from random import randint
def alphanumrand(n):
bounds = ['1','2','3','4','5','6','7','8','9',
'A','B','C','D','E','F']
string_buffer = ''
for index in range(0,n):
string_buffer += bounds[randint(0,14)]
return string_buffer
if __name__ == '__main__':
print alphanumrand(2097152).decode('hex')
效果很好;采用以下示例输出:
Öõ╔i§g┬Ø}>#àæƒÒ1È/-Q|Ð┬Ô/µåQàà¡#ÎKnÚ4+▀Ö▲↔u│öCü╗§íJ
uX▒ý┘w©╔SĹ4)&Cié▓B↔↑rÏ×2O>↔gªE]±Ñ∟"N4←$¹ÖM═┤#R┴¼-Ä
Ûý(v:ÈRC┘ F┌èGB/©↔╦mCØ*ƒ[ýw┼J*=T‼å╩]ñuö¶╗^[╬┼î3Ñê²H
7:┬┴)r∟¬9ôEw±\┐§↕¿fºXã¯H$<)tÆ3?äAʃ←+>®ÌË■㤫▀╣|▬▬↕
ý¬sÚ╩ØAèX¢È¦I▄<ÿ°ı↨h8º+½ù²$←yezj9}7ËÀ»5/;·Á┼¾ÕúÒÛ┘┤
U╔¸Þ■;↔²%∟╩═Þ┤Æ◄ó¶Öl=Ñ▒Ú╝ü~wïåbzå*À¼~/╬‗BÀ´®£ }▒ïÚ
∟ma§ã"_5┼═║Ñx3y"§U/‼]Gß.X}wií◄┴ñj¬a÷I?7·⌂àc?wÌZsZv←
├2ûuB║®_ Ï╚S▼[¬ò↨E§Inz$HàU²Ê╗kż½·┐mxYÑ╔çäÔ!b·åÒ∟-
bf".«M'T\ø_Ø×edaâK®Æ┤¹═╗─õãË¡◄┬¤©?Ð→ª▀jÂîQ┐9ʃ=┘3Ý↑
À┬ÙU§ou~Ë╩c╠,¢ú}╣À<>┤→u╚Qõ▄╬dê÷jħOr→·º↓rÀ╔B¦3°L¬±Ý
H╦▓à?┤;è┴X↕½‗▒o¼¤;³÷Cz·ü_RYùâ├UÍLØz²ÌçZ²¬i$ÞÛÈ"║âj
"¿┴¹¼¾%(K┘|║éBZ\ëÔ%◄▲‗¶D■?c鳤&±êÊ«v⌂qªG}of┼÷ѳM!-Ù
gÆ╩╝2qR|¿å÷ÙÂ‗¾|ï∟¶▀eå¦~AXKß4⌂▀═mýzæ²ÿ↕▒%ìÐMÒÅmS!¥§
+G▼╠↨v■↓xËMÐÞoÅA¿ëu╬╩─®t$ºrK{t¿üÑ5¸→é%ûn¿Ý©í▒1#┘▓4┴
E©¸╩↕vq6¯k┼CQ╝xû╝╣/%Ô4║ÈÌe¢¹è]‼{q ƒºÛ←óÔ ■ÿ.Å▲↕3'¬ı
除非我找不到任何合法的方式将其输出到文件,无论是 utf-8
还是与此相关的任何其他编解码器。
以下 UnicodeDecodeError
异常消息也可能有用。
UnicodeDecodeError: 'utf16' codec can't decode bytes in position 104-105: illegal UTF-16 surrogate
UnicodeDecodeError: 'utf8' codec can't decode byte 0xfc in position 1: invalid start byte
UnicodeDecodeError: 'ascii' codec can't decode byte 0xd9 in position 0: ordinal not in range(128)
如果你现在还没有注意到;我不喜欢 unicode,应该多研究一下。
N.B - 使用 Python 2.7
您无需指定任何编码,只需指定File.write(alphanumrand(2097152).decode('hex'))
。这将写入您生成的字节。
这对我有用:
if __name__ == '__main__':
print 'Writing...'
with open('test.txt','w') as f:
f.write(alphanumrand(2097152).decode('hex'))
print 'Done'
with open('test.txt') as f:
print repr(f.read())
我一直在尝试将任意字符(实际上是任何类型的字符)输出到生成的文件中。考虑下面的起始代码(可能会写得更好,但只是想现在就开始工作)。
from random import randint
def alphanumrand(n):
bounds = ['1','2','3','4','5','6','7','8','9',
'A','B','C','D','E','F']
string_buffer = ''
for index in range(0,n):
string_buffer += bounds[randint(0,14)]
return string_buffer
if __name__ == '__main__':
print alphanumrand(2097152).decode('hex')
效果很好;采用以下示例输出:
Öõ╔i§g┬Ø}>#àæƒÒ1È/-Q|Ð┬Ô/µåQàà¡#ÎKnÚ4+▀Ö▲↔u│öCü╗§íJ
uX▒ý┘w©╔SĹ4)&Cié▓B↔↑rÏ×2O>↔gªE]±Ñ∟"N4←$¹ÖM═┤#R┴¼-Ä
Ûý(v:ÈRC┘ F┌èGB/©↔╦mCØ*ƒ[ýw┼J*=T‼å╩]ñuö¶╗^[╬┼î3Ñê²H
7:┬┴)r∟¬9ôEw±\┐§↕¿fºXã¯H$<)tÆ3?äAʃ←+>®ÌË■㤫▀╣|▬▬↕
ý¬sÚ╩ØAèX¢È¦I▄<ÿ°ı↨h8º+½ù²$←yezj9}7ËÀ»5/;·Á┼¾ÕúÒÛ┘┤
U╔¸Þ■;↔²%∟╩═Þ┤Æ◄ó¶Öl=Ñ▒Ú╝ü~wïåbzå*À¼~/╬‗BÀ´®£ }▒ïÚ
∟ma§ã"_5┼═║Ñx3y"§U/‼]Gß.X}wií◄┴ñj¬a÷I?7·⌂àc?wÌZsZv←
├2ûuB║®_ Ï╚S▼[¬ò↨E§Inz$HàU²Ê╗kż½·┐mxYÑ╔çäÔ!b·åÒ∟-
bf".«M'T\ø_Ø×edaâK®Æ┤¹═╗─õãË¡◄┬¤©?Ð→ª▀jÂîQ┐9ʃ=┘3Ý↑
À┬ÙU§ou~Ë╩c╠,¢ú}╣À<>┤→u╚Qõ▄╬dê÷jħOr→·º↓rÀ╔B¦3°L¬±Ý
H╦▓à?┤;è┴X↕½‗▒o¼¤;³÷Cz·ü_RYùâ├UÍLØz²ÌçZ²¬i$ÞÛÈ"║âj
"¿┴¹¼¾%(K┘|║éBZ\ëÔ%◄▲‗¶D■?c鳤&±êÊ«v⌂qªG}of┼÷ѳM!-Ù
gÆ╩╝2qR|¿å÷ÙÂ‗¾|ï∟¶▀eå¦~AXKß4⌂▀═mýzæ²ÿ↕▒%ìÐMÒÅmS!¥§
+G▼╠↨v■↓xËMÐÞoÅA¿ëu╬╩─®t$ºrK{t¿üÑ5¸→é%ûn¿Ý©í▒1#┘▓4┴
E©¸╩↕vq6¯k┼CQ╝xû╝╣/%Ô4║ÈÌe¢¹è]‼{q ƒºÛ←óÔ ■ÿ.Å▲↕3'¬ı
除非我找不到任何合法的方式将其输出到文件,无论是 utf-8
还是与此相关的任何其他编解码器。
以下 UnicodeDecodeError
异常消息也可能有用。
UnicodeDecodeError: 'utf16' codec can't decode bytes in position 104-105: illegal UTF-16 surrogate
UnicodeDecodeError: 'utf8' codec can't decode byte 0xfc in position 1: invalid start byte
UnicodeDecodeError: 'ascii' codec can't decode byte 0xd9 in position 0: ordinal not in range(128)
如果你现在还没有注意到;我不喜欢 unicode,应该多研究一下。
N.B - 使用 Python 2.7
您无需指定任何编码,只需指定File.write(alphanumrand(2097152).decode('hex'))
。这将写入您生成的字节。
这对我有用:
if __name__ == '__main__':
print 'Writing...'
with open('test.txt','w') as f:
f.write(alphanumrand(2097152).decode('hex'))
print 'Done'
with open('test.txt') as f:
print repr(f.read())