I've read through a dozen google entries and other SO questions regarding the same issue but I can't fix it. The example error code is: import matplotlib as plt, but plenty of other things will trigger it.
The whole output is:
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-11-20da4deed62d> in <module>()
      1 #import pandas as pd
----> 2 import matplotlib as plt
/usr/local/lib/python2.7/site-packages/matplotlib/__init__.py in <module>()
   1129 
   1130 # this is the instance used by the matplotlib classes
-> 1131 rcParams = rc_params()
   1132 
   1133 if rcParams['examples.directory']:
/usr/local/lib/python2.7/site-packages/matplotlib/__init__.py in rc_params(fail_on_error)
    973         return ret
    974 
--> 975     return rc_params_from_file(fname, fail_on_error)
    976 
    977 
/usr/local/lib/python2.7/site-packages/matplotlib/__init__.py in rc_params_from_file(fname, fail_on_error, use_default_template)
   1098         parameters specified in the file. (Useful for updating dicts.)
   1099     """
-> 1100     config_from_file = _rc_params_in_file(fname, fail_on_error)
   1101 
   1102     if not use_default_template:
/usr/local/lib/python2.7/site-packages/matplotlib/__init__.py in _rc_params_in_file(fname, fail_on_error)
   1016     cnt = 0
   1017     rc_temp = {}
-> 1018     with _open_file_or_url(fname) as fd:
   1019         try:
   1020             for line in fd:
/usr/local/Cellar/python/2.7.11/Frameworks/Python.framework/Versions/2.7/lib/python2.7/contextlib.pyc in __enter__(self)
     15     def __enter__(self):
     16         try:
---> 17             return self.gen.next()
     18         except StopIteration:
     19             raise RuntimeError("generator didn't yield")
/usr/local/lib/python2.7/site-packages/matplotlib/__init__.py in _open_file_or_url(fname)
    998     else:
    999         fname = os.path.expanduser(fname)
-> 1000         encoding = locale.getdefaultlocale()[1]
   1001         if encoding is None:
   1002             encoding = "utf-8"
/usr/local/Cellar/python/2.7.11/Frameworks/Python.framework/Versions/2.7/lib/python2.7/locale.pyc in getdefaultlocale(envvars)
    541     else:
    542         localename = 'C'
--> 543     return _parse_localename(localename)
    544 
    545 
/usr/local/Cellar/python/2.7.11/Frameworks/Python.framework/Versions/2.7/lib/python2.7/locale.pyc in _parse_localename(localename)
    473     elif code == 'C':
    474         return None, None
--> 475     raise ValueError, 'unknown locale: %s' % localename
    476 
    477 def _build_localename(localetuple):
ValueError: unknown locale: UTF-8
This error shows up in a Jupyter Notebook, trying different codes, but so far not in the terminal.
I thought they might be using different binaries but it doesn't look that way running print sys.executable:
- Notebook: 
/usr/local/opt/python/bin/python2.7 - CLI: 
/usr/local/opt/python/bin/python2.7 
Trying to find out more, I run this in the Python CLI:
>>> import locale
>>> print locale.getdefaultlocale()
('en_US', 'UTF-8')
And then in a Notebook:
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-1-35604c361744> in <module>()
      1 import locale
----> 2 print locale.getdefaultlocale()
/usr/local/Cellar/python/2.7.11/Frameworks/Python.framework/Versions/2.7/lib/python2.7/locale.pyc in getdefaultlocale(envvars)
    541     else:
    542         localename = 'C'
--> 543     return _parse_localename(localename)
    544 
    545 
/usr/local/Cellar/python/2.7.11/Frameworks/Python.framework/Versions/2.7/lib/python2.7/locale.pyc in _parse_localename(localename)
    473     elif code == 'C':
    474         return None, None
--> 475     raise ValueError, 'unknown locale: %s' % localename
    476 
    477 def _build_localename(localetuple):
ValueError: unknown locale: UTF-8
print locale.getlocale() on the other hand gets the same output in both places: (None, None)
All I found is that I have to fix my locale settings, but they seem just fine in the Terminal:
$ locale
LANG="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_CTYPE="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_ALL="en_US.UTF-8"
Edit: little plot twist I just discovered
Using two instances of Jupyter or Ipython makes the whole thing work.
So, whether I first run jupyter notebook or ipython notebook, and then I go and open a new Terminal tab and launch a second jupyter notebook or ipython notebook, that second instance in the browser (or in the Terminal if I don't add the notebook part, I've tried all combinations) will run with no locale problems whatsoever.
In the name of science, I then closed the first instance, and the second instance kept performing just as good.
Edit2: Shell info:
I use Iterm2 running ZSH. At first I tried adding these two lines:
$ head .zshrc
export LC_ALL=en_US.UTF-8
export LANG=en_US.UTF-8
If I comment those out and relaunch the console, this is what I get:
$ locale
LANG=
LC_COLLATE="C"
LC_CTYPE="UTF-8"
LC_MESSAGES="C"
LC_MONETARY="C"
LC_NUMERIC="C"
LC_TIME="C"
LC_ALL=
In which case, even the Python CLI will throw the same error.
Regarding tabs 1 and 2, I compared results using {locale & locale -a } > tab1 and {locale & locale -a } > tab2 but results are identical in that regard:
And yes down the line I've got these:
en_US
en_US.ISO8859-1
en_US.ISO8859-15
en_US.US-ASCII
en_US.UTF-8
So completeley lost here. How to fix this madness?
