40中年
2021-06-25 10:55
采纳率: 100%
浏览 83
已采纳

python 中英文字符,文本换行问题,求指导

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℃时,若未对热水器进行排水操作,那么热水器内部可能', '结冰,此时应保证热水器处于通电状态(可以不打开热水器开关),发热体组件将会自', '动运行。'] 两行都加了有问题。

  • 写回答
  • 好问题 提建议
  • 追加酬金
  • 关注问题
  • 邀请回答

3条回答 默认 最新

  • CSDN专家-文盲老顾 2021-06-25 11:57
    最佳回答
    import re
    obj="警告:当环境温度可能低于0℃时,若未对热水器进行排水操作,那么热水器内部可能结冰,此时应保证热水器处于通电状态(可以不打开热水器开关),发热体组件将会自动运行。"
    
    def re_cut(obj,sec):
        r = []
        s = obj.encode('utf8')
        while len(s) > 0:
            length = sec * 3
            if len(s)<length:
                r.append(s.decode('utf8'))
                break;
            t = str(s[:length])
            m = re.findall(r'(?:\\x[8-9a-f][0-9a-f]){1,3}|[\u0020-\u007f]',t,re.I)
            last = re.findall(r'\\x[8-9a-f][0-9a-f]',m[-2],re.I)
            #length -= len(last) % 3
            length += 3 - len(last)
            r.append(s[:length].decode('utf8'))
            s = s[length:]
        return r
    
    d=re_cut(obj,37)
    print(d,[len(n.encode('utf8')) for n in d])
    
    # 先用正则帮你实现以下

    根据需要,自己选择是 length+=还是-=的行

    ['警告:当环境温度可能低于0℃时,若未对热水器进行排水操作,那么热水器内部可', '能结冰,此时应保证热水器处于通电状态(可以不打开热水器开关),发热体组件将会', '自动运行。'] [109, 110, 15]

    ['警告:当环境温度可能低于0℃时,若未对热水器进行排水操作,那么热水器内部可能', '结冰,此时应保证热水器处于通电状态(可以不打开热水器开关),发热体组件将会自动', '运行。'] [112, 113, 9]

     

    评论
    解决 无用
    打赏 举报
查看更多回答(2条)

相关推荐 更多相似问题