import os
import sys

if sys.version_info[0] == 2:
  _ENCODE = sys.getfilesystemencoding()

  def path_join(*args):
    bin_args = map(lambda a: a.decode(_ENCODE), args)
    return os.path.join(*bin_args).encode(_ENCODE)

  def str_join(s, l):
    bin_args = map(lambda a: a.decode(_ENCODE), l)
    b = s.decode(_ENCODE)
    return b.join(bin_args).encode(_ENCODE)

else:

  path_join = os.path.join

  def str_join(s, l):
    return s.join(l)
