12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970 |
- #!/usr/bin/python
- # -*- coding: utf-8 -*-
- # Test program for :make, :grep and :cgetfile.
- from __future__ import print_function, unicode_literals
- import locale
- import io
- import sys
- def set_output_encoding(enc=None):
- """Set the encoding of stdout and stderr
- arguments:
- enc -- Encoding name.
- If omitted, locale.getpreferredencoding() is used.
- """
- if enc is None:
- enc = locale.getpreferredencoding()
- def get_text_writer(fo, **kwargs):
- kw = dict(kwargs)
- kw.setdefault('errors', 'backslashreplace') # use \uXXXX style
- kw.setdefault('closefd', False)
- if sys.version_info[0] < 3:
- # Work around for Python 2.x
- # New line conversion isn't needed here. Done in somewhere else.
- writer = io.open(fo.fileno(), mode='w', newline='', **kw)
- write = writer.write # save the original write() function
- enc = locale.getpreferredencoding()
- def convwrite(s):
- if isinstance(s, bytes):
- write(s.decode(enc)) # convert to unistr
- else:
- write(s)
- try:
- writer.flush() # needed on Windows
- except IOError:
- pass
- writer.write = convwrite
- else:
- writer = io.open(fo.fileno(), mode='w', **kw)
- return writer
- sys.stdout = get_text_writer(sys.stdout, encoding=enc)
- sys.stderr = get_text_writer(sys.stderr, encoding=enc)
- def main():
- enc = 'utf-8'
- if len(sys.argv) > 1:
- enc = sys.argv[1]
- set_output_encoding(enc)
- message_tbl = {
- 'utf-8': 'ÀÈÌÒÙ こんにちは 你好',
- 'latin1': 'ÀÈÌÒÙ',
- 'cp932': 'こんにちは',
- 'cp936': '你好',
- }
- print('Xfoobar.c(10) : %s (%s)' % (message_tbl[enc], enc))
- if __name__ == "__main__":
- main()
|