Be more correct about encoding/decoding strings under py3. Patch by aeruder.

This commit is contained in:
Holger Rapp 2014-04-11 19:51:36 +02:00
commit eff62c336a
2 changed files with 31 additions and 15 deletions

View File

@ -1384,6 +1384,7 @@ individuals have contributed to UltiSnips (in chronological order):
Pedro Ferrari - petobens Pedro Ferrari - petobens
Ches Martin - ches Ches Martin - ches
Christian - Oberon00 Christian - Oberon00
Andrew Ruder - aeruder
Thank you for your support. Thank you for your support.

View File

@ -10,22 +10,21 @@ import sys
import vim # pylint:disable=import-error import vim # pylint:disable=import-error
if sys.version_info >= (3, 0):
def _vim_dec(string): def _vim_dec(string):
"""Decode 'string' using &encoding.""" """Decode 'string' using &encoding."""
try: # We don't have the luxury here of failing, everything
return string.decode(vim.eval("&encoding")) # falls apart if we don't return a bytearray from the
except UnicodeDecodeError: # passed in string
# At least we tried. There might be some problems down the road now return string.decode(vim.eval("&encoding"), "replace")
return string
def _vim_enc(string): def _vim_enc(bytearray):
"""Encode 'string' using &encoding.""" """Encode 'string' using &encoding."""
try: # We don't have the luxury here of failing, everything
return string.encode(vim.eval("&encoding")) # falls apart if we don't return a string from the passed
except UnicodeEncodeError: # in bytearray
return string return bytearray.encode(vim.eval("&encoding"), "replace")
if sys.version_info >= (3, 0):
def open_ascii_file(filename, mode): def open_ascii_file(filename, mode):
"""Opens a file in "r" mode.""" """Opens a file in "r" mode."""
return open(filename, mode, encoding="utf-8") return open(filename, mode, encoding="utf-8")
@ -60,6 +59,22 @@ if sys.version_info >= (3, 0):
else: else:
import warnings import warnings
warnings.filterwarnings("ignore", category=DeprecationWarning) warnings.filterwarnings("ignore", category=DeprecationWarning)
def _vim_dec(string):
"""Decode 'string' using &encoding."""
try:
return string.decode(vim.eval("&encoding"))
except UnicodeDecodeError:
# At least we tried. There might be some problems down the road now
return string
def _vim_enc(string):
"""Encode 'string' using &encoding."""
try:
return string.encode(vim.eval("&encoding"))
except UnicodeEncodeError:
return string
def open_ascii_file(filename, mode): def open_ascii_file(filename, mode):
"""Opens a file in "r" mode.""" """Opens a file in "r" mode."""
return open(filename, mode) return open(filename, mode)