diff --git a/glances/compat.py b/glances/compat.py
index ac971075..c19bde05 100644
--- a/glances/compat.py
+++ b/glances/compat.py
@@ -21,7 +21,8 @@
# pylint: skip-file
"""Python 2/3 compatibility shims."""
-from __future__ import print_function
+from __future__ import print_function, unicode_literals
+
import operator
import sys
import unicodedata
@@ -84,23 +85,29 @@ if PY3:
def itervalues(d):
return iter(d.values())
- def u(s):
+ def u(s, errors='replace'):
if isinstance(s, text_type):
return s
- return s.decode('utf-8', 'replace')
+ return s.decode('utf-8', errors=errors)
- def b(s):
+ def b(s, errors='replace'):
if isinstance(s, binary_type):
return s
- return s.encode('utf-8')
+ return s.encode('utf-8', errors=errors)
- def nativestr(s):
+ def n(s):
+ '''Only in Python 2...
+ from future.utils import bytes_to_native_str as n
+ '''
+ return s
+
+ def nativestr(s, errors='replace'):
if isinstance(s, text_type):
return s
elif isinstance(s, (int, float)):
return s.__str__()
else:
- return s.decode('utf-8', 'replace')
+ return s.decode('utf-8', errors=errors)
def system_exec(command):
"""Execute a system command and return the resul as a str"""
@@ -113,6 +120,7 @@ if PY3:
return res.rstrip()
else:
+ from future.utils import bytes_to_native_str as n
import Queue as queue
from itertools import imap as map
from ConfigParser import SafeConfigParser as ConfigParser, NoOptionError, NoSectionError
@@ -167,23 +175,23 @@ else:
def itervalues(d):
return d.itervalues()
- def u(s):
+ def u(s, errors='replace'):
if isinstance(s, text_type):
return s
- return s.decode('utf-8')
+ return s.decode('utf-8', errors=errors)
- def b(s):
+ def b(s, errors='replace'):
if isinstance(s, binary_type):
return s
- return s.encode('utf-8', 'replace')
+ return s.encode('utf-8', errors=errors)
- def nativestr(s):
+ def nativestr(s, errors='replace'):
if isinstance(s, binary_type):
return s
elif isinstance(s, (int, float)):
return s.__str__()
else:
- return s.encode('utf-8', 'replace')
+ return s.encode('utf-8', errors=errors)
def system_exec(command):
"""Execute a system command and return the resul as a str"""
diff --git a/glances/folder_list.py b/glances/folder_list.py
index 892cdfeb..cbd5df15 100644
--- a/glances/folder_list.py
+++ b/glances/folder_list.py
@@ -18,6 +18,7 @@
# along with this program. If not, see .
"""Manage the folder list."""
+from __future__ import unicode_literals
import os
diff --git a/glances/outputs/glances_curses.py b/glances/outputs/glances_curses.py
index 230408aa..3251ad0e 100644
--- a/glances/outputs/glances_curses.py
+++ b/glances/outputs/glances_curses.py
@@ -18,6 +18,7 @@
# along with this program. If not, see .
"""Curses interface class."""
+from __future__ import unicode_literals
import re
import sys
diff --git a/glances/plugins/glances_diskio.py b/glances/plugins/glances_diskio.py
index 1b3b6bd1..0635115f 100644
--- a/glances/plugins/glances_diskio.py
+++ b/glances/plugins/glances_diskio.py
@@ -18,8 +18,9 @@
# along with this program. If not, see .
"""Disk I/O plugin."""
+from __future__ import unicode_literals
-from glances.compat import nativestr
+from glances.compat import nativestr, n
from glances.timer import getTimeSinceLastUpdate
from glances.plugins.glances_plugin import GlancesPlugin
@@ -110,7 +111,7 @@ class Plugin(GlancesPlugin):
self.diskio_old[disk].write_bytes)
diskstat = {
'time_since_update': time_since_update,
- 'disk_name': disk,
+ 'disk_name': n(disk),
'read_count': read_count,
'write_count': write_count,
'read_bytes': read_bytes,
diff --git a/glances/plugins/glances_folders.py b/glances/plugins/glances_folders.py
index f6505221..014343d6 100644
--- a/glances/plugins/glances_folders.py
+++ b/glances/plugins/glances_folders.py
@@ -18,10 +18,11 @@
# along with this program. If not, see .
"""Folder plugin."""
+from __future__ import unicode_literals
import numbers
-from glances.compat import nativestr
+from glances.compat import nativestr, n
from glances.folder_list import FolderList as glancesFolderList
from glances.plugins.glances_plugin import GlancesPlugin
from glances.logger import logger
diff --git a/glances/plugins/glances_fs.py b/glances/plugins/glances_fs.py
index 80e3a028..27eec413 100644
--- a/glances/plugins/glances_fs.py
+++ b/glances/plugins/glances_fs.py
@@ -18,10 +18,11 @@
# along with this program. If not, see .
"""File system plugin."""
+from __future__ import unicode_literals
import operator
-from glances.compat import u, nativestr
+from glances.compat import u, nativestr, n
from glances.plugins.glances_plugin import GlancesPlugin
import psutil
diff --git a/glances/plugins/glances_network.py b/glances/plugins/glances_network.py
index 34e3429b..90535355 100644
--- a/glances/plugins/glances_network.py
+++ b/glances/plugins/glances_network.py
@@ -18,12 +18,14 @@
# along with this program. If not, see .
"""Network plugin."""
+from __future__ import unicode_literals
import base64
import operator
from glances.timer import getTimeSinceLastUpdate
from glances.plugins.glances_plugin import GlancesPlugin
+from glances.compat import n, u, b, nativestr
import psutil
@@ -119,7 +121,7 @@ class Plugin(GlancesPlugin):
rx = cumulative_rx - self.network_old[net].bytes_recv
tx = cumulative_tx - self.network_old[net].bytes_sent
cx = rx + tx
- netstat = {'interface_name': net,
+ netstat = {'interface_name': n(net),
'time_since_update': time_since_update,
'cumulative_rx': cumulative_rx,
'rx': rx,