function showTxtPreview(url, fileName) {

  var xhr = new XMLHttpRequest();

  xhr.open('GET', url, true);

  xhr.responseType = 'arraybuffer';

  xhr.onload = function() {

    if (xhr.status === 200) {

      var buffer = xhr.response;

      var text = '';

      // 先尝试 UTF-8

      var decoder = new TextDecoder('utf-8', { fatal: false });

      text = decoder.decode(buffer);

      // 若包含替换字符 �,则改用 GBK 重新解码

      if (text.indexOf('\uFFFD') !== -1) {

        decoder = new TextDecoder('gbk');

        text = decoder.decode(buffer);

      }

      _createTxtOverlay(text, fileName || '');

    } else {

      showToast('Failed to read file');

    }

  };

  xhr.onerror = function() {

    showToast('Failed to read file');

  };

  xhr.send();

}