from __future__ import unicode_literals
import re
import six

BASIC_LATIN_RE = re.compile(r'[\u0021-\u007E]')
WHITESPACE_RE = re.compile("[\s]+", re.UNICODE)


def force_text(value):
    if isinstance(value, six.text_type):
        return value
    elif isinstance(value, six.string_types):
        return six.b(value).decode()
    else:
        value = str(value)
        return value if isinstance(value, six.text_type) else value.decode()


def basic_latin_to_fullwidth(value):
    """
    基本ラテン文字を全角に変換する
    U+0021..U+007FはU+FF01..U+FF5Eに対応しているので
    コードポイントに差分の0xFEE0を足す
    """
    _value = value.replace(' ', '\u3000')
    return BASIC_LATIN_RE.sub(lambda x: unichr(ord(x.group(0)) + 0xFEE0), _value)


def aggregate_whitespace(value):
    return ' '.join(WHITESPACE_RE.split(value))

from __future__ import unicode_literals
import re
import six

BASIC_LATIN_RE = re.compile(r'[\u0021-\u007E]')
WHITESPACE_RE = re.compile("[\s]+", re.UNICODE)


def force_text(value):
    if isinstance(value, six.text_type):
        return value
    elif isinstance(value, six.string_types):
        return six.b(value).decode('utf-8')
    else:
        value = str(value)
        return value if isinstance(value, six.text_type) else value.decode('utf-8')


def basic_latin_to_fullwidth(value):
    """
    基本ラテン文字を全角に変換する
    U+0021..U+007FはU+FF01..U+FF5Eに対応しているので
    コードポイントに差分の0xFEE0を足す
    """
    _value = value.replace(' ', '\u3000')
    return BASIC_LATIN_RE.sub(lambda x: unichr(ord(x.group(0)) + 0xFEE0), _value)


def aggregate_whitespace(value):
    return ' '.join(WHITESPACE_RE.split(value))

Fix UnicodeDecodeError on the environments where the default encoding is ascii
Fix UnicodeDecodeError on the environments where the default encoding is ascii

  from __future__ import unicode_literals
  import re
  import six
  
  BASIC_LATIN_RE = re.compile(r'[\u0021-\u007E]')
  WHITESPACE_RE = re.compile("[\s]+", re.UNICODE)
  
  
  def force_text(value):
      if isinstance(value, six.text_type):
          return value
      elif isinstance(value, six.string_types):
-         return six.b(value).decode()
+         return six.b(value).decode('utf-8')
      else:
          value = str(value)
-         return value if isinstance(value, six.text_type) else value.decode()
+         return value if isinstance(value, six.text_type) else value.decode('utf-8')
  
  
  def basic_latin_to_fullwidth(value):
      """
      基本ラテン文字を全角に変換する
      U+0021..U+007FはU+FF01..U+FF5Eに対応しているので
      コードポイントに差分の0xFEE0を足す
      """
      _value = value.replace(' ', '\u3000')
      return BASIC_LATIN_RE.sub(lambda x: unichr(ord(x.group(0)) + 0xFEE0), _value)
  
  
  def aggregate_whitespace(value):
      return ' '.join(WHITESPACE_RE.split(value))
  
Fix UnicodeDecodeError on the environments where the default encoding is ascii
## Code Before:
from __future__ import unicode_literals
import re
import six

BASIC_LATIN_RE = re.compile(r'[\u0021-\u007E]')
WHITESPACE_RE = re.compile("[\s]+", re.UNICODE)


def force_text(value):
    if isinstance(value, six.text_type):
        return value
    elif isinstance(value, six.string_types):
        return six.b(value).decode()
    else:
        value = str(value)
        return value if isinstance(value, six.text_type) else value.decode()


def basic_latin_to_fullwidth(value):
    """
    基本ラテン文字を全角に変換する
    U+0021..U+007FはU+FF01..U+FF5Eに対応しているので
    コードポイントに差分の0xFEE0を足す
    """
    _value = value.replace(' ', '\u3000')
    return BASIC_LATIN_RE.sub(lambda x: unichr(ord(x.group(0)) + 0xFEE0), _value)


def aggregate_whitespace(value):
    return ' '.join(WHITESPACE_RE.split(value))

## Instruction:
Fix UnicodeDecodeError on the environments where the default encoding is ascii
## Code After:
from __future__ import unicode_literals
import re
import six

BASIC_LATIN_RE = re.compile(r'[\u0021-\u007E]')
WHITESPACE_RE = re.compile("[\s]+", re.UNICODE)


def force_text(value):
    if isinstance(value, six.text_type):
        return value
    elif isinstance(value, six.string_types):
        return six.b(value).decode('utf-8')
    else:
        value = str(value)
        return value if isinstance(value, six.text_type) else value.decode('utf-8')


def basic_latin_to_fullwidth(value):
    """
    基本ラテン文字を全角に変換する
    U+0021..U+007FはU+FF01..U+FF5Eに対応しているので
    コードポイントに差分の0xFEE0を足す
    """
    _value = value.replace(' ', '\u3000')
    return BASIC_LATIN_RE.sub(lambda x: unichr(ord(x.group(0)) + 0xFEE0), _value)


def aggregate_whitespace(value):
    return ' '.join(WHITESPACE_RE.split(value))
