summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorxi <xi@18f92427-320e-0410-9341-c67f048884a3>2006-04-12 22:26:41 +0000
committerxi <xi@18f92427-320e-0410-9341-c67f048884a3>2006-04-12 22:26:41 +0000
commit5b3ffc5848ec0b8c5555fc66e6f67b9baab4739a (patch)
treefb4fff27a2574aa992a8b6a81b6c7e46f7b95211
parentc2522283bae63cbde4350067ef3636cbe3c6bc74 (diff)
downloadpyyaml-5b3ffc5848ec0b8c5555fc66e6f67b9baab4739a.tar.gz
Fix allow_unicode (ticket:3).
git-svn-id: http://svn.pyyaml.org/pyyaml/trunk@135 18f92427-320e-0410-9341-c67f048884a3
-rw-r--r--lib/yaml/__init__.py4
-rw-r--r--lib/yaml/representer.py17
-rw-r--r--lib/yaml/serializer.py2
3 files changed, 14 insertions, 9 deletions
diff --git a/lib/yaml/__init__.py b/lib/yaml/__init__.py
index 6097345..e6a3526 100644
--- a/lib/yaml/__init__.py
+++ b/lib/yaml/__init__.py
@@ -67,7 +67,7 @@ def emit(events, writer=None, Emitter=Emitter):
def dump_all(natives, writer=None, Emitter=Emitter,
Serializer=Serializer, Representer=Representer,
- encoding=None, line_break=None, canonical=None,
+ encoding='utf-8', line_break=None, canonical=None,
indent=None, width=None, allow_unicode=None):
if writer is None:
try:
@@ -91,7 +91,7 @@ def dump_all(natives, writer=None, Emitter=Emitter,
def safe_dump_all(natives, writer=None, Emitter=Emitter,
Serializer=Serializer, Representer=SafeRepresenter,
- encoding=None, line_break=None, canonical=None,
+ encoding='utf-8', line_break=None, canonical=None,
indent=None, width=None, allow_unicode=None):
return dump_all(natives, writer, Emitter, Serializer, Representer,
encoding, line_break, canonical, indent, width, allow_unicode)
diff --git a/lib/yaml/representer.py b/lib/yaml/representer.py
index caf06c6..6fe74fc 100644
--- a/lib/yaml/representer.py
+++ b/lib/yaml/representer.py
@@ -119,14 +119,19 @@ class SafeRepresenter(Detector, BaseRepresenter):
u'null')
def represent_str(self, native):
+ encoding = None
try:
- native.encode('ascii')
- ascii = True
- except (UnicodeDecodeError, UnicodeEncodeError):
- ascii = False
- if ascii:
+ unicode(native, 'ascii')
+ encoding = 'ascii'
+ except UnicodeDecodeError:
+ try:
+ unicode(native, 'utf-8')
+ encoding = 'utf-8'
+ except UnicodeDecodeError:
+ pass
+ if encoding:
return self.represent_scalar(u'tag:yaml.org,2002:str',
- unicode(native, 'ascii'))
+ unicode(native, encoding))
else:
return self.represent_scalar(u'tag:yaml.org,2002:binary',
unicode(native.encode('base64')), style='|')
diff --git a/lib/yaml/serializer.py b/lib/yaml/serializer.py
index 6a5aafc..5807a3a 100644
--- a/lib/yaml/serializer.py
+++ b/lib/yaml/serializer.py
@@ -19,7 +19,7 @@ class Serializer:
self.anchors = {}
self.last_anchor_id = 0
self.closed = None
- self.open(encoding, line_break, canonical, indent, width)
+ self.open(encoding, line_break, canonical, indent, width, allow_unicode)
def open(self, encoding=None, line_break=None, canonical=None,
indent=None, width=None, allow_unicode=None):