小米便签乱码怎么回事?

100 2024-09-23 21:19

一、小米便签乱码怎么回事?

可能的文件发生了错误,建议重新编写看看。

二、手机便签乱码怎么恢复?

可以用airdrop,比较方便直接 步骤如下打开接收方的手机里的右下方airdrop然后发出方打开备忘录想传输的东西,点击右上方传输按钮点airdrop 然后搜到传递的那个人的手机传递就可以了 最后传完点关闭,对了 别忘了蓝牙和WiFi不随着airdrop关闭而关闭,需要自己再关一次

三、小米手机怎样查看私密便签

小米手机怎样查看私密便签

在日常生活中,手机已经成为人们生活不可或缺的一部分。手机中存储着大量的个人信息、照片、文件等内容,为了保护隐私,很多人会在手机上设置私密便签。那么,当你想要查看这些私密便签时,该如何操作呢?特别是对于使用小米手机的用户来说,下面将详细介绍在小米手机上如何查看私密便签。

步骤一:打开便签应用

首先,在小米手机的主屏幕上找到并点击便签应用图标,进入便签应用界面。

步骤二:进入私密便签

在便签应用界面中,通常私密便签会被设置成隐藏状态。此时,你需要进行特定的操作才能进入私密便签。一般情况下,你可以长按屏幕上的某个区域,或者在便签应用中找到设置选项,查找私密便签入口。

步骤三:验证身份

为了保护隐私,进入私密便签前通常需要进行身份验证。你可能需要输入密码、指纹、或进行其他指定的身份验证方式。验证通过后,你将成功进入私密便签页面。

步骤四:查看私密便签内容

一旦成功进入私密便签页面,你就可以浏览、编辑、或添加私密便签内容了。这些内容不会在普通便签界面显示,只有在进入私密便签后才能看到。

小结

对于小米手机用户来说,查看私密便签并不复杂,只需要按照上述步骤进行操作即可。通过设置私密便签,你可以更好地保护个人隐私信息,避免他人未经允许查看你的私密内容。希望以上内容对你有所帮助,如有任何疑问或需要进一步指导,请随时联系我们。

四、vivo便签变成乱码怎么恢复?

可以查看以下三种恢复便签方法:

1.之前有导出便签,可以进入手机文件管理--所有文件/手机存储/SD卡--便签文件夹中找到;

2.通过vivo手机助手备份了便签,可以将手机连接vivo手机助手,然后进入数据备份--恢复--选择已备份的备份包双击恢复;

3.将便签备份到vivo云了,可以点击vivo云--登陆--便签--选择要恢复的便签导入手机

五、便签内容乱码怎么办?

可能中病毒了,需要找专业人员查看

六、小米手机便签出问题,一个便签里的内容全变成乱码了?

嗨!

可能的文件发生了错误,建议重新编写看看。

七、小米便签入口?

现在是笔记,入口就在桌面上啊

八、如何将 小米便签里的笔记 转移到 魅族便签?

小米提供了导出功能 做的够多了 下来就看魅族了

九、小米便签怎么同步到vivo便签?

把小米手机上的便签内容传到vivo手机上,可以使用敬业签:

1、先把小米手机的便签内容复制到敬业签中,安卓手机可以直接将便签内容逐条分享到敬业签。

2、内容较多的话可以先把便签内容整理成TXT文档或者excel文件,然后通过敬业签网页版数据导入功能批量导入。

3、最后在VIVO手机里登录同一敬业签账号之后就可以看到自己导入的内容了。

十、如何让小米便签在电脑上导出?

如何让小米便签在电脑上导出?

获得了灵感,打算编个更好的。

目前相比于ta的脚本,仅仅是能标记出更多信息,并显示图片而已,其余的坑以后填:

  • 导出思维导图;
  • 支持粗体、字号、列表等富文本格式;
  • 支持语音等其它附件;
  • 支持自定义背景;
  • 使用indexedDB而不是变量存储暂时获取的数据;
  • 给导出的HTML文件披个好看点的皮;
  • 支持输出成更干净整洁的JSON或数据库数据,方便简单处理后导入到别的笔记、日记应用中;
  • 发到GitHub;
  • 发到博客,简要介绍它的原理(没什么技术含量其实);
  • ……

作者是高中生,学业要紧,所以不会很快更新,还请见谅。

抓取笔记

i.mi.com 登录,然后选择“笔记”(Notes)。

在这个网页按下F12键,打开开发者工具(DevTools),切换到“控制台”(Console),在控制台中粘贴以下代码。

(async () => {
    /**
     * Replaces :attribute: with the corresponding attribute and converts :: to :.
     * 
     * @param string The string pending to be proceeded.
     * @param attributes The attributes pending to be replaced with.
     */
    function substitute(string, attributes = {}) {
        let output = '';
        let insideColon = false;
        let attribute = '';
        for (let character of string) {
            if(character === ':') {
                insideColon = !insideColon;
                if(!insideColon)
                    output += attributes?.[attribute] ?? ( //If you set attributes[''] to something, it will replace the colon.
                        attribute.length ? `:${attribute}:` : ':'
                    );
                attribute = '';
                continue;
            }
            if(insideColon)
                attribute += character;
            else
                output += character;
        }
        return output;
    }

    /**
     * Fetches an image as data URL.
     * Reference: https://www.cnblogs.com/cyfeng/p/16107747.html
     * 
     * @param id The image ID.
     */
    async function fetchImage(id) {
        let image;

        {
            const exceptions = [];
            for(let i = 0; i < maxAttempts; i++) {
                try {
                    image = new Image();
                    /**
                     * Tainted canvases may not be exported.
                     * See https://www.cnblogs.com/iroading/p/11011268.html.
                     */
                    image.setAttribute('crossOrigin', 'anonymous');
                    image.src = substitute(urls['image'], { id });
                    await new Promise((resolve, reject) => {
                        image.addEventListener('load', resolve);
                        image.addEventListener('error', reject);
                    });
                    break;
                } catch(exception) {
                    exceptions.push(exception);
                }
            }
            if(exceptions.length) { //Remember !![] === true.
                window.failures ? window.failures.push(...exceptions) : window.failures = exceptions;
                throw new Error('Too many failed trials. For more information, check out window.failures.');
            }
        }

        const canvas = document.createElement('canvas');
        const { width, height } = image;
        canvas.width = width;
        canvas.height = height;
        canvas.getContext('2d').drawImage(image, 0, 0, width, height);
        return canvas.toDataURL('image/png');
    }
    
    /**
     * Requests a page and returns the result in JSON.
     * If failed, the request will be retried for `maxAttempts` time(s).
     * 
     * @param key The key of the URL in the var `urls`.
     * @param attributes Attributes.
     */
    async function query(key, attributes = {}) {
        const exceptions = [];
        for(let i = 0; i < maxAttempts; i++) {
            try {
                return await (await fetch(substitute(urls[key], {
                    time: (new Date()).getTime(),
                    ...attributes
                }))).json();
            }
            catch(exception) {
                exceptions.push(exception);
            }
        }
        window.failures ? window.failures.push(...exceptions) : window.failures = exceptions;
        throw new Error('Too many failed trials. For more information, check out window.failures.');
    }

    const urls = {
        list: '/note/full/page/?ts=:time:&limit=200',
        listWithSyncTag: '/note/full/page/?ts=:time:&limit=200&syncTag=:syncTag:',
        note: '/note/note/:id:/?ts=:time:',
        image: '/file/full?type=note_img&fileid=:id:'
    };
    const maxAttempts = 20;
    let folders = [];
    let notes = [];
    let images = [];
    let syncTag;
    let neededToContinue = true;

    console.log('Query start.');
    console.groupCollapsed('Notes fetched');
    do {
        const { data } = await query(syncTag ? 'listWithSyncTag' : 'list', { syncTag });
        if(data.folders) folders.push(...data.folders);
        console.log(folders.length, ' table(s) found:');
        console.log(folders.forEach(({ subject }) => subject));
        for(let { id } of data.entries) {
            const { data: { entry: noteData } } = await query('note', { id });
            //Request the referenced images simultaneously.
            for(let line of noteData.content.replace(/\<0\/\>\<.*?\/\>/g, '').split('\n'))
                if (line.startsWith('☺ ')) images.push({
                    id: line.substr(2),
                    image: await fetchImage(line.substr(2))
                });
            notes.push(noteData);
            console.count('note');
            console.log('Retrieved note:', noteData?.snippet?.substr?.(0, 20));
        }
        neededToContinue = data.entries.length;
        syncTag = data.syncTag;
    } while(neededToContinue); //the variable `data` can't be references here. Damn it!

    console.groupEnd('Notes fetched');
    window.exportedData = {
        folders,
        notes,
        images
    };
    console.log('Congrats! Check out window.exportedData.');
})();

按回车键执行代码,当出现“Congrats! Check out window.exporetedData”时,抓取已完成。

生成笔记网页

如果你只是希望得到高票回答中那样的一个包含所有笔记的网页,可以接着在控制台粘贴、执行这些代码。

//Convert to single HTML file.
//Reference: http://www.manongjc.com/detail/51-ccdsfcjzubummse.html
{
    const { folders, images, notes } = window.exportedData;
    let html = `<head>
    <meta name="viewport" content="width=device-width" />
    <title>小米笔记导出</title>
    <style> img { max-width: 90vw; max-height: 500px; } figcaption { color: rgb(0, 0, 0, .54); margin-top: 8px; }</style>
</head>
<h1>小米笔记导出</h1>
`;

    /**
     * Converts a time-stamp to a a Chinese date text.
     * @param time Time-stamp (Unit: ms) 
     */
    function formatDate(time) {
        const date = new Date(time);
        return `${date.getFullYear()}${date.getMonth() + 1}${date.getDate()}${date.getHours()}:${date.getMinutes()}:${date.getSeconds()}.${date.getMilliseconds()}`;
    }

    const imageTable = images.reduce((reduced, { id, image }) => ({
        ...reduced,
        [id]: image
    }), {});
    notes.sort(({ modifyDate }, { modifyDate: _modifyDate }) => modifyDate - _modifyDate);

    for(let { content, extraInfo, folderId, id, createDate, modifyDate } of notes) {
        const folder = folders.filter(({ _id }) => _id === folderId)[0]?.subject ?? '未分类';
        let title, mindMap;
        if(extraInfo) {
            let { title: _title, note_content_type } = JSON.parse(extraInfo);
            title = _title ?? '(无标题)';
            mindMap = note_content_type === 'mind';
        } else {
            title = '(无标题)';
            mindMap = false;
        }
        html += [
            '<hr />',
            '<hr />',
            `<h2 id="${id}">${title}</h2>`,
            [
                `分类:${folder}`,
                `创建:${formatDate(createDate)}`,
                `最后修改:${formatDate(modifyDate)}`,
            ].join(' | '),
            '<hr />',
            mindMap ? '(暂不支持思维导图导出)' : '',
            ...content.split('\n').map(line => {
                if(line.startsWith('☺ ')) return `<figure><img src="${
                    imageTable[line.replace(/\<0\/\>\<.*?\/\>/g, '').substr(2)]
                }" /><figcaption>${line.match(/\<0\/\>\<(?<title>.*?)\/\>/)?.groups.title.replaceAll('"', '&quot;') ?? ''}</figcaption></figure>`;
                return `<p>${line}</p>`;
            })
        ].join('\n');
    }

    const a = document.createElement('a');
    const blob = new Blob([ html ]);
    a.download = 'notes.html';
    a.href = URL.createObjectURL(blob);
    a.click();
    URL.revokeObjectURL(blob);
}

可能会卡一会,卡的时间因笔记大小和设备性能有关。

导出成JSON

执行这些代码,就可以以JSON文件形式下载它们。如果你会代码,怎么处理它们不用多说了吧。

//download the JSON file
//Reference: http://www.manongjc.com/detail/51-ccdsfcjzubummse.html
{
    const a = document.createElement('a');
    const blob = new Blob([ JSON.stringify(exportedData) ]);
    a.download = 'notes.json';
    a.href = URL.createObjectURL(blob);
    a.click();
    URL.revokeObjectURL(blob);
}
顶一下
(0)
0%
踩一下
(0)
0%
相关评论
我要评论
点击我更换图片