由于url支持26个英文字母、数字和少数几个特殊字符,因此,对于url中包含非标准url的字符时,就需要对其进行编码。

中文音频Url在安卓和window上都能正常播放,在iOS上会出现错误,APP崩溃。

audioplayers/WrappedMediaPlayer.swift:224: Fatal error: Unexpectedly found nil while unwrapping an Optional value

之前使用PHP转码,但是如果其中含有已转义的%等符号时,又会再次转义而导致错误。

现在改为在APP端进行转码。在传入的URL先进行正则判断是否含有中文,如果含中文,进行URL编码。

///判断url是否含有中文,有则进行urlencode
bool isChinese(String value) {
  return RegExp(r"[\u4e00-\u9fa5]").hasMatch(value);
}

String chineseUrlEncode(String inputUrl) {
  String outputUrl = inputUrl;
  bool boolIsChinese = isChinese(inputUrl);

  if (Global.isIOS && boolIsChinese) {
    outputUrl = Uri.encodeFull(inputUrl);
    debugPrint("url 编码  歌曲URL 2 -> $outputUrl");
  } else {
    debugPrint("无需编码 2 -> $outputUrl");
  }
  return outputUrl;
}