易语言吧 关注:266,602贴子:1,664,947
  • 13回复贴,共1

求教求教(请问如何防止取文本中间取出到中文的一般导致乱码)

只看楼主收藏回复

如题如题 初中那会弄的小说阅读器碰到的问题 放下了十多年现在有空 想给它画个真正的句号了。这问题想了好久实在是想不到办法以前是直接取消任意数值,换用换行符去分割段落的方法收工的。想想果然还是不甘心 。求指教


IP属地:广东1楼2021-06-22 18:28回复
    判断编码,如果是utf8就转换成gbk2312


    IP属地:重庆来自Android客户端2楼2021-06-22 19:12
    回复
      不会乱码啊,是不是固定长度或者字符了


      来自Android客户端3楼2021-06-24 11:14
      回复
        位置取错了应该,


        来自Android客户端5楼2021-06-25 17:10
        收起回复
          逐字:
          我以前写聊天机器人的时候想要机器人能逐字输出,于是有了以下方法:
          0,逐字输出需要能识别汉字,因为英文等是1字节,汉字是2字节
          1,不管当前读的位置在哪里,直接取代码
          2,这样的代码是ascii 而实际的汉字对应代码是小于0的,
          3,因此对于任意一段文本可以根据文本长度一位一位的读,然后判断取代码是否小于0,如果小于0,就直接读2位,否则读1位,以此实现逐字输出。
          标点:
          以前调用百度语音合成的时候碰到一个问题,就是一大段文本发过去后需要等待1~2秒才能拿到语音。我嫌太慢。
          1,单条文本不长的话,是可以实现毫秒级响应的,但长文本不行,所以就意味着要分割成多条小文本来发送。
          2,没有采取逐字判断,而是以标点符号来分割
          3,标点符号没有限制为只一种,只要是任意的标点符号,都是分割标识符。
          4,首先把整段文字的所有标点符号找出来,并记录位置,存为数组,根据标点位置数组直接把整段文本进行分割。
          你的情况:
          1,任意数值x 取文本长
          2,第一次取的时候,判断最后一个位置 取代码后是不是小于0,如果是,+1,再更新下次的起始位置并以此类推即可。


          来自Android客户端6楼2021-07-03 00:16
          收起回复
            人傻了,到字节() 到底是怎么用的 0-255数字本身返回的还是数字本身 其它返回的全是零 字节本身不能跟数字比大小或者进行运算吗


            IP属地:广东来自Android客户端7楼2021-07-07 16:41
            回复
              到字节,就是一个数据类型的转换而已。
              你需要复习下或重新学习下 数据类型。以及占用字节数、进制、编码等相关知识。
              --1个字节,就是8个位(比特)
              到字节,就是把原数据的切割到 这8个位中。
              比如易语言一个整数型是占4个字节的
              整数型的12345,其字节集就是{57,48,0,0}
              如果把它到字节,那么只会保留57,即低8位,因为字节数据类型只装得下一个字节。
              照理说,一个文本也是由2个字节构成的,但是直接用到字节 去取 “坑”,确是0。
              只能说易语言在它内部做了处理,类似的“a” 等文本都不行,但是“12345” 这样的数字文本,却可以。只能说它内部可能直接先来了一波 到整数 。问题是你去用 到整数("坑“) 返回的就是0 ,所以到字节必须是0。
              如果你非要取,仍旧可以绕过它换个方法
              1、文本型a = “坑”
              2、把 a 变成字节集: 字节集b = 到字节集(a)
              3、把 字节集b 转成整数型:整数型c = 取字节集数据(a,#整数型)
              4、最后 到字节(c) 你得到了十进制的 191 ,这个191正是组成“坑”这个字的低八位字节
              “坑” = {191,211} //默认的gb2312编码(十六进制BFD3,你可以找个gb2312表查查)
              5、确实麻烦
              字节数据 实际上就是二进制,8位的二进制对应的十进制范围就是 0 ~ 255
              你看到的返回了数字本身,是刚好你输入的在 0~255范围内,如果你是256到字节 就是0,257到字节就是1,
              因为 256 对应的二进制,用1个字节是装不下的,256 = 0001 0000 0000 ,低8位全是0,所以到字节就是0
              257 = 0001 0000 0001,低8位是0000 0001 ,所以到字节是1


              8楼2021-07-07 21:31
              回复
                谢谢大佬,学到了


                IP属地:广东来自Android客户端9楼2021-07-22 15:35
                回复
                  告诉你个解决办法,转换到字节集,判断字节集数据,通过字节集返回数据进行+1或-1处理


                  IP属地:吉林10楼2022-11-10 21:33
                  回复