diff -urN v1/ezhtml.py v2/ezhtml.py --- v1/ezhtml.py 2018-09-16 16:32:39.000000000 +0900 +++ v2/ezhtml.py 2018-09-17 00:15:20.000000000 +0900 @@ -3,6 +3,7 @@ import sys import yaml import six +import nkf def cv_amp(s, d='enc'): lst = [ ('&','&'), ('<','<'), ('>','>') ] @@ -28,15 +29,16 @@ return cv_amp(o) if __name__ == "__main__": - fi = sys.stdin if six.PY2 else sys.stdin.buffer - s = fi.read() - s = unicode(s, 'utf-8') if six.PY2 else s.decode() + b = nkf.get_stdin() + opt = nkf.guess(b) + u8 = nkf.cvt(b, '-u') + s = nkf.dec(u8) o = yaml.load(s) s = html_dump(o) + '\n' - s = s.encode('utf-8') if six.PY2 else s.encode() - fo = sys.stdout if six.PY2 else sys.stdout.buffer - fo.write(s) + u8 = nkf.enc(s) + b = nkf.cvt(u8, opt) + nkf.put_stdout(b) # EOF diff -urN v1/nkf.py v2/nkf.py --- v1/nkf.py 1970-01-01 09:00:00.000000000 +0900 +++ v2/nkf.py 2018-09-17 00:15:20.000000000 +0900 @@ -0,0 +1,55 @@ +#!/usr/bin/env python + +import sys +import six +import subprocess + +PIPE = subprocess.PIPE + +enc = lambda s: s.encode('utf-8') if six.PY2 else s.encode() +dec = lambda b: unicode(b, 'utf-8') if six.PY2 else b.decode() + +def do_cmd(cmd, in_b): + cmd = enc(cmd) + proc = subprocess.Popen(cmd, shell=True, stdin=PIPE, stdout=PIPE) + proc.stdin.write(in_b) + proc.stdin.close() + r = proc.stdout.read() + proc.wait() + return r # out_b + +def get_stdin(): + fi = sys.stdin if six.PY2 else sys.stdin.buffer + return fi.read() # b + +def put_stdout(b): + fo = sys.stdout if six.PY2 else sys.stdout.buffer + fo.write(b) + +def guess(b): + b = do_cmd('nkf -g', b) + return dec(b).strip() + +def cvt(b, opt): + if opt == 'ASCII': + return b + d = { + 'ISO-2022-JP': '-j', + 'EUC-JP': '-e', + 'Shift_JIS': '-s', + 'UTF-8': '-u', + } + if opt not in d.values(): + opt = d.get(opt, '-u') + return do_cmd('nkf ' + opt, b) + +if __name__ == "__main__": + b = get_stdin() + opt = guess(b) + u8 = cvt(b, '-u') + s = dec(u8) + # ... + u8 = enc(s) + b = cvt(u8, opt) + put_stdout(b) +# EOF