test_makeencoding.py 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. #!/usr/bin/python
  2. # -*- coding: utf-8 -*-
  3. # Test program for :make, :grep and :cgetfile.
  4. from __future__ import print_function, unicode_literals
  5. import locale
  6. import io
  7. import sys
  8. def set_output_encoding(enc=None):
  9. """Set the encoding of stdout and stderr
  10. arguments:
  11. enc -- Encoding name.
  12. If omitted, locale.getpreferredencoding() is used.
  13. """
  14. if enc is None:
  15. enc = locale.getpreferredencoding()
  16. def get_text_writer(fo, **kwargs):
  17. kw = dict(kwargs)
  18. kw.setdefault('errors', 'backslashreplace') # use \uXXXX style
  19. kw.setdefault('closefd', False)
  20. if sys.version_info[0] < 3:
  21. # Work around for Python 2.x
  22. # New line conversion isn't needed here. Done in somewhere else.
  23. writer = io.open(fo.fileno(), mode='w', newline='', **kw)
  24. write = writer.write # save the original write() function
  25. enc = locale.getpreferredencoding()
  26. def convwrite(s):
  27. if isinstance(s, bytes):
  28. write(s.decode(enc)) # convert to unistr
  29. else:
  30. write(s)
  31. try:
  32. writer.flush() # needed on Windows
  33. except IOError:
  34. pass
  35. writer.write = convwrite
  36. else:
  37. writer = io.open(fo.fileno(), mode='w', **kw)
  38. return writer
  39. sys.stdout = get_text_writer(sys.stdout, encoding=enc)
  40. sys.stderr = get_text_writer(sys.stderr, encoding=enc)
  41. def main():
  42. enc = 'utf-8'
  43. if len(sys.argv) > 1:
  44. enc = sys.argv[1]
  45. set_output_encoding(enc)
  46. message_tbl = {
  47. 'utf-8': 'ÀÈÌÒÙ こんにちは 你好',
  48. 'latin1': 'ÀÈÌÒÙ',
  49. 'cp932': 'こんにちは',
  50. 'cp936': '你好',
  51. }
  52. print('Xfoobar.c(10) : %s (%s)' % (message_tbl[enc], enc))
  53. if __name__ == "__main__":
  54. main()