utf-8编码 英文字符字节数为1 中文为3 一行最多填37个中文字符且字节数为37*3为111,如果存在英文字符,就填不满37个中文字符的位置,就需要从下一行的字符加到英文字符这一行。也就是字节数在106-108的字节数需要加一个从下一行加一个中文。 我这个写法有问题,当第一行满足111 第二行不满足,我这个写法就把列表第一行 和第二行都加上字符了。需要怎么修改9-11行的代码.
obj=<span class="hljs-string">"警告:当环境温度可能低于0℃时,若未对热水器进行排水操作,那么热水器内部可能结冰,此时应保证热水器处于通电状态(可以不打开热水器开关),发热体组件将会自动运行。"</span>
<span class="hljs-keyword">def</span> <span class="hljs-title function_">cut</span>(<span class="hljs-params">obj, sec</span>):
str_list = [obj[i:i + sec] <span class="hljs-keyword">for</span> i <span class="hljs-keyword">in</span> <span class="hljs-built_in">range</span>(<span class="hljs-number">0</span>, <span class="hljs-built_in">len</span>(obj), sec)]
<span class="hljs-keyword">for</span> w <span class="hljs-keyword">in</span> str_list:
<span class="hljs-keyword">if</span> <span class="hljs-built_in">len</span>(w.encode(<span class="hljs-string">"utf-8"</span>))>=<span class="hljs-number">108</span>:
<span class="hljs-keyword">pass</span>
<span class="hljs-keyword">elif</span> <span class="hljs-built_in">len</span>(w.encode(<span class="hljs-string">"utf-8"</span>))<=107<span class="hljs-keyword">and</span> <span class="hljs-built_in">len</span>(w.encode(<span class="hljs-string">"utf-8"</span>))><span class="hljs-number">104</span>:
sec+=<span class="hljs-number">1</span>
str_list = [obj[i:i + sec] <span class="hljs-keyword">for</span> i <span class="hljs-keyword">in</span> <span class="hljs-built_in">range</span>(<span class="hljs-number">0</span>, <span class="hljs-built_in">len</span>(obj), sec)]
<span class="hljs-keyword">return</span> str_list
<span class="hljs-keyword">else</span>:
<span class="hljs-keyword">pass</span>
c=cut(obj,<span class="hljs-number">37</span>)
<span class="hljs-built_in">print</span>(c)
要的效果是: ['警告:当环境温度可能低于0℃时,若未对热水器进行排水操作,那么热水器内部可','能结冰,此时应保证热水器处于通电状态(可以不打开热水器开关),发热体组件将会','自动运行。'] 而我的是:['警告:当环境温度可能低于0℃时,若未对热水器进行排水操作,那么热水器内部可能', '结冰,此时应保证热水器处于通电状态(可以不打开热水器开关),发热体组件将会自', '动运行。'] 两行都加了有问题。