@@ -136,6 +136,12 @@ def to_string(self):
136
136
def _encode_diff (x ):
137
137
return len (x ) - len (x .decode ('utf-8' ))
138
138
139
+ def _strlen (x ):
140
+ try :
141
+ return len (x .decode ('utf-8' ))
142
+ except UnicodeError :
143
+ return len (x )
144
+
139
145
class DataFrameFormatter (object ):
140
146
"""
141
147
Render a DataFrame
@@ -204,7 +210,7 @@ def to_string(self, force_unicode=False):
204
210
if self .header :
205
211
fmt_values = self ._format_col (i )
206
212
cheader = str_columns [i ]
207
- max_len = max (max (len (x ) for x in fmt_values ),
213
+ max_len = max (max (_strlen (x ) for x in fmt_values ),
208
214
max (len (x ) for x in cheader ))
209
215
if self .justify == 'left' :
210
216
cheader = [x .ljust (max_len ) for x in cheader ]
@@ -606,7 +612,7 @@ def _make_fixed_width(strings, justify='right'):
606
612
if len (strings ) == 0 :
607
613
return strings
608
614
609
- max_len = max (len (x ) for x in strings )
615
+ max_len = max (_strlen (x ) for x in strings )
610
616
conf_max = print_config .max_colwidth
611
617
if conf_max is not None and max_len > conf_max :
612
618
max_len = conf_max
@@ -617,7 +623,12 @@ def _make_fixed_width(strings, justify='right'):
617
623
justfunc = lambda self , x : self .rjust (x )
618
624
619
625
def just (x ):
620
- return justfunc (x [:max_len ], max_len )
626
+ try :
627
+ eff_len = max_len + _encode_diff (x )
628
+ except UnicodeError :
629
+ eff_len = max_len
630
+
631
+ return justfunc (x [:eff_len ], eff_len )
621
632
622
633
return [just (x ) for x in strings ]
623
634
0 commit comments