प्रस्तावना: क्या आपका दर्शक काम करेगा?
सुनिश्चित करें कि आपका दर्शक / संपादक / टर्मिनल (हालाँकि आप अपनी utf-8 एन्कोडेड फ़ाइल के साथ सहभागिता कर रहे हैं) फ़ाइल को पढ़ सकते हैं। यह अक्सर विंडोज पर एक मुद्दा है , उदाहरण के लिए, नोटपैड।
पाठ फ़ाइल में यूनिकोड पाठ लिखना?
पायथन 2 में, मॉड्यूल open
से उपयोग करें io
(यह open
पायथन 3 में बिलिन के समान है ):
import io
सर्वोत्तम अभ्यास, सामान्य रूप से, UTF-8
फ़ाइलों को लिखने के लिए उपयोग करें (हमें utf-8 के साथ बाइट-ऑर्डर के बारे में चिंता करने की ज़रूरत नहीं है)।
encoding = 'utf-8'
utf-8 सबसे आधुनिक और सार्वभौमिक रूप से प्रयोग करने योग्य एन्कोडिंग है - यह सभी वेब ब्राउज़र, अधिकांश टेक्स्ट-एडिटर्स (यदि आपकी समस्या है तो अपनी सेटिंग्स देखें) और अधिकांश टर्मिनलों / गोले में काम करता है।
utf-16le
यदि आप नोटपैड (या किसी अन्य सीमित दर्शक) में आउटपुट देखने तक सीमित हैं , तो विंडोज पर, आप कोशिश कर सकते हैं।
encoding = 'utf-16le' # sorry, Windows users... :(
और बस इसे संदर्भ प्रबंधक के साथ खोलें और अपने यूनिकोड वर्णों को लिखें:
with io.open(filename, 'w', encoding=encoding) as f:
f.write(unicode_object)
कई यूनिकोड वर्णों का उपयोग करके उदाहरण
यहां एक उदाहरण दिया गया है जो तीन बिट्स तक विस्तृत हर संभावित चरित्र को मैप करने का प्रयास करता है (4 अधिकतम है, लेकिन डिजिटल प्रतिनिधित्व से एक एनकोडेड प्रिन्टेबल आउटपुट में, इसके नाम के साथ, अगर यह थोड़ा सा हो तो) संभव (इसे एक फ़ाइल में कहा जाता है uni.py
):
from __future__ import print_function
import io
from unicodedata import name, category
from curses.ascii import controlnames
from collections import Counter
try: # use these if Python 2
unicode_chr, range = unichr, xrange
except NameError: # Python 3
unicode_chr = chr
exclude_categories = set(('Co', 'Cn'))
counts = Counter()
control_names = dict(enumerate(controlnames))
with io.open('unidata', 'w', encoding='utf-8') as f:
for x in range((2**8)**3):
try:
char = unicode_chr(x)
except ValueError:
continue # can't map to unicode, try next x
cat = category(char)
counts.update((cat,))
if cat in exclude_categories:
continue # get rid of noise & greatly shorten result file
try:
uname = name(char)
except ValueError: # probably control character, don't use actual
uname = control_names.get(x, '')
f.write(u'{0:>6x} {1} {2}\n'.format(x, cat, uname))
else:
f.write(u'{0:>6x} {1} {2} {3}\n'.format(x, cat, char, uname))
# may as well describe the types we logged.
for cat, count in counts.items():
print('{0} chars of category, {1}'.format(count, cat))
यह लगभग एक मिनट के क्रम में चलना चाहिए, और आप डेटा फ़ाइल देख सकते हैं, और यदि आपका फ़ाइल दर्शक यूनिकोड प्रदर्शित कर सकता है, तो आप इसे देख पाएंगे। श्रेणियों के बारे में जानकारी यहाँ मिल सकती है । गिनती के आधार पर, हम संभवतः Cn और Co श्रेणियों को छोड़कर हमारे परिणामों में सुधार कर सकते हैं, जिनके साथ कोई प्रतीक नहीं जुड़ा है।
$ python uni.py
यह हेक्साडेसिमल मैपिंग, श्रेणी , प्रतीक (जब तक कि नाम नहीं मिल सकता है, तो संभवतः एक नियंत्रण चरित्र), और प्रतीक का नाम प्रदर्शित करेगा। जैसे
मैं less
यूनिक्स या साइगविन पर सलाह देता हूं (अपने आउटपुट में संपूर्ण फ़ाइल को प्रिंट / कैट न करें):
$ less unidata
उदाहरण निम्न पंक्तियों के समान होगा जो मैंने इसे पायथन 2 (यूनिकोड 5.2) का उपयोग करके नमूना किया था:
0 Cc NUL
20 Zs SPACE
21 Po ! EXCLAMATION MARK
b6 So ¶ PILCROW SIGN
d0 Lu Ð LATIN CAPITAL LETTER ETH
e59 Nd ๙ THAI DIGIT NINE
2887 So ⢇ BRAILLE PATTERN DOTS-1238
bc13 Lo 밓 HANGUL SYLLABLE MIH
ffeb Sm → HALFWIDTH RIGHTWARDS ARROW
एनाकोंडा से मेरे पायथन 3.5 में यूनिकोड 8.0 है, मैं सबसे अधिक 3-का अनुमान लगाऊंगा।