-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathCharset.py
80 lines (67 loc) · 2.53 KB
/
Charset.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
#!/usr/bin/env python
# -*- coding: utf-8 -*-
#Copyright 2010-2011 Mika Bostrom
#This program is free software: you can redistribute it and/or modify
#it under the terms of the GNU Affero General Public License as published by
#the Free Software Foundation, version 3 of the License.
#
#This program is distributed in the hope that it will be useful,
#but WITHOUT ANY WARRANTY; without even the implied warranty of
#MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
#GNU General Public License for more details.
#
#You should have received a copy of the GNU Affero General Public License
#along with this program. If not, see <http://www.gnu.org/licenses/>.
#In the "official" distribution you can find the license in agpl-3.0.txt.
import L10n
_ = L10n.get_translation()
# Error logging
import sys
# String manipulation
import codecs
# Settings
import Configuration
encoder_to_utf = codecs.lookup('utf-8')
encoder_to_sys = codecs.lookup(Configuration.LOCALE_ENCODING)
# I'm saving a few cycles with this one
not_needed1, not_needed2, not_needed3 = False, False, False
if Configuration.LOCALE_ENCODING == 'UTF8':
not_needed1, not_needed2, not_needed3 = True, True, True
def to_utf8(s):
if not_needed1: return s
try:
#(_out, _len) = encoder_to_utf.encode(s)
_out = unicode(s, Configuration.LOCALE_ENCODING).encode('utf-8')
return _out
except UnicodeDecodeError:
sys.stderr.write(_('Could not convert: "%s"') % (s+"\n"))
raise
except UnicodeEncodeError:
sys.stderr.write(_('Could not encode: "%s"') % (s+"\n"))
raise
except TypeError: # TypeError is raised when we give unicode() an already encoded string
return s
def to_db_utf8(s):
if not_needed2: return s
try:
(_out, _len) = encoder_to_utf.encode(unicode(s))
return _out
except UnicodeDecodeError:
sys.stderr.write(_('Could not convert: "%s"') % (s+"\n"))
raise
except UnicodeEncodeError:
sys.stderr.write(_('Could not encode: "%s"') % (s+"\n"))
raise
def to_gui(s):
if not_needed3: return s
try:
# we usually don't want to use 'replace' but this is only for displaying
# in the gui so it doesn't matter if names are missing an accent or two
(_out, _len) = encoder_to_sys.encode(s, 'replace')
return _out
except UnicodeDecodeError:
sys.stderr.write(_('Could not convert: "%s"') % (s+"\n"))
raise
except UnicodeEncodeError:
sys.stderr.write(_('Could not encode: "%s"') % (s+"\n"))
raise