【问题标题】:Android question mark in TextView?TextView中的Android问号?
【发布时间】:2014-05-22 22:30:36
【问题描述】:

我在 Android 活动的 TextView 中遇到重音字符问题。渲染显示问号而不是字符“è”和“à”。流程是:从网络资源中获取一个midi文件->提取歌词->将歌词放入TextView中。我不明白编码或字符集是否有问题。我尝试使用“UTF-8”或“ISO ...”对文件进行编码,但每次尝试都失败了。你能帮帮我吗?

提前致谢。

【问题讨论】:

  • 如果它们显示为?,这通常意味着字体中缺少字形。但是,应该支持这些字符。
  • 我确认这些字符存在于 Android 标准字体中,因为它们存在于意大利语中。我想原始文件不是 UTF-8 编码的 或者您使用的是自定义字体。
  • 你要知道歌词的编码;不太可能是 UTF-8。
  • @CommonsWare 我正在尝试更改字体
  • @CL 问题是文件是midi,我不明白如何提取歌词序列的编码信息。

标签: android character-encoding non-ascii-characters file-encodings


【解决方案1】:

在将歌词放入 textview 之前,您可以尝试这样的操作:

newLyrics = new String(oldString.getBytes("UTF-8"),"UTF-8");

【讨论】:

  • 嗨@MJ93,您的解决方案可能是正确的,但不适合我。我的问题出在我从网络资源获得的编码 midi 文件上。在使用 MIDI Api 提取歌词文本之前,我需要对文件进行正确编码。
【解决方案2】:

检查一次:

https://www.csie.ntu.edu.tw/~r92092/ref/midi/

Midi 文件基本上由二进制格式 + ascii 值作为标头数据组成,所以如果你可以转换它并像这样表示它-
如果您可以将该二进制格式编码为 base64,这会将任何数据转换为 ascii 安全文本

【讨论】:

    【解决方案3】:

    你可以试试下面的代码:

    //String encode function
    fun encodeEmoji(message: String): String {
        try {
            return URLEncoder.encode(
                message,
                "UTF-8"
            )
        } catch (e: UnsupportedEncodingException) {
            return message
        }
    
    }
    
    
    //String decode function
    fun decodeEmoji(message: String): String {
        val myString: String? = null
        try {
            return URLDecoder.decode(
                message, "UTF-8"
            )
        } catch (e: UnsupportedEncodingException) {
                return message
        }
    
    }
    

    函数的使用

        var string:String=CommonMethod.encodeEmoji("your string")
    
        string=CommonMethod.decodeEmoji(string)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-12-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-14
      • 2016-08-07
      • 1970-01-01
      相关资源
      最近更新 更多