Apertura di file .memo dallapp memo predefinita di Samsung

Ho .memo file sul mio PC dallapp memo predefinita su un telefono Samsung di proprietà precedente. Quando vengono aperti in Blocco note, i file non contengono testo normale. Come posso recuperare il contenuto dei promemoria?

Risposta

Utilizzando VLC player o scaricando Samsung Note per PC come indicato qui

Metodi correlati menzionati qui per lesportazione: vedere la risposta di Husni “del file zip soluzione e altri

Come posso esportare promemoria Samsung?

Risposta

Ho scritto il mio convertitore “memo2txt” in Python. Ecco lo script (prima dovrai installare le librerie Python usando pip ):

import os import re import glob import zipfile import xmltodict from datetime import datetime MEMO_PATH = r"i:\MY\PROGRAMMING\AndroidMemoExtracter\MemoFiles" RESULTS_PATH = r"i:\MY\PROGRAMMING\AndroidMemoExtracter\Results" memos = glob.glob(MEMO_PATH + "\*.memo") for i, memo in enumerate(memos): print("{}/{} - {}".format(i+1, len(memos), memo)) try: # Extract *.memo file and read the content archive = zipfile.ZipFile(memo, "r") memo_content = archive.read("memo_content.xml").decode("utf-8") cleanr = re.compile("&.*?;") memo_content = re.sub(cleanr, "", memo_content) memo_content = xmltodict.parse(memo_content) text = memo_content["memo"]["contents"]["content"] # Generate filename from memo timestamp timestamp = int(memo_content["memo"]["header"]["meta"][2]["@createdTime"][:10]) date = datetime.fromtimestamp(timestamp).strftime("%Y-%m-%d %H-%M-%S") file_name = "{}.txt".format(date) # Save file as a *.txt with open(os.path.join(RESULTS_PATH, file_name), "w", encoding="utf-8") as file: file.write(text) except zipfile.BadZipFile: continue 

Answer

ispirato da beeshyams, ecco la mia versione …

sul mio Samsung J3, i memo sono in un drive MTP da qualche parte come …

SAMSUNG Android/Phone/ShareMemo/*.memo

lxml sorgente ha un aspetto simile a questo:

<?xml version="1.0" encoding="UTF-8"?> <memo Version="1.0"> <header> <meta title="==PROGRAMMING=="/> <meta favourite="false"/> <meta uuid="85f94ab2-77a8-XXXXXXXXXXXXXXX"/> <meta createdTime="1551038092051"/> </header> <contents> <content>&lt;p value="memo2" &gt;=====&lt;/p&gt;&lt;p&gt;https://medium.freecodecamp.org/&lt;/p&gt;&lt;p&gt;=====&lt;/p&gt; </content> </contents> </memo> 

Eseguo questa trasformazione xslt su di esso …

 <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:variable name="s1"> <!-- https://float-middle.com/how-to-put-cdata-into-script-tag-in-xslt/ --> <![CDATA[ //https://stackoverflow.com/questions/847185/convert-a-unix-timestamp-to-time-in-javascript //https://stackoverflow.com/questions/5292372/how-to-pass-parameters-to-a-script-tag var ts = document.currentScript.getAttribute("timestamp") document.write(""+ts+": "+Date(ts).toLocaleString()); ]]> </xsl:variable> <xsl:template match="/"> <html lang="en_UK"> <head> <style> body {background-color: powderblue;} #title {color: red; font-size: 300%;} .content {color: green;} </style> <meta charset="UTF-8"/> <title> <xsl:apply-templates select="memo/header/meta[@title]"/> </title> </head> <body> <span> <xsl:apply-templates select="memo/header/meta[@title]"/> </span> <xsl:text disable-output-escaping="yes"> <![CDATA[&nbsp;&mdash;&nbsp;]]> </xsl:text> <span> <xsl:apply-templates select="memo/header/meta[@createdTime]"/> </span> <div class="content"> <xsl:apply-templates select="memo/contents"/> </div> </body> </html> </xsl:template> <!-- ============================================ --> <xsl:template match="memo/header/meta[@title]"> <xsl:apply-templates select="@title"/> </xsl:template> <xsl:template match="@title"> <xsl:value-of select="."/> <xsl:if test="string-length(.)=0">...</xsl:if> </xsl:template> <!-- ============================================ --> <xsl:template match="memo/header/meta[@createdTime]"> <script type="text/javascript"> <xsl:attribute name="timestamp"> <xsl:value-of select="@createdTime" /> </xsl:attribute> <!-- https://float-middle.com/how-to-put-cdata-into-script-tag-in-xslt/ --> <xsl:text disable-output-escaping="yes"> /* &lt;![CDATA[ */ </xsl:text> <xsl:value-of select="$s1" disable-output-escaping="yes"/> <xsl:text disable-output-escaping="yes"> /* ]]&gt; */ </xsl:text> </script> </xsl:template> <xsl:template match="@createdTime"> <xsl:value-of select="."/> </xsl:template> <!-- ============================================ --> <xsl:template match="memo/contents"> <xsl:value-of select="content" disable-output-escaping="yes"/> <xsl:if test="string-length(content)=0">...</xsl:if> </xsl:template> </xsl:stylesheet> 

utilizzando lxml da python ..

import os import glob import zipfile from lxml import etree import sys if len(sys.argv) < 3: print("python3 convert_memos.py <memo-dir> <html-dir>") sys.exit() MEMO_PATH = os.path.join(sys.argv[1], "") HTML_PATH = os.path.join(sys.argv[2], "") xslt_src = """[see xml above]""" memos = glob.glob(MEMO_PATH + "*.memo") for i, memo in enumerate(memos): try: archive = zipfile.ZipFile(memo, "r") src = archive.read("memo_content.xml").decode("utf-8") xslt = etree.XML(xslt_src) xml = etree.XML(str.encode(src)) transform = etree.XSLT(xslt) result = transform(xml) root = result.getroot() html = etree.tostring(root, pretty_print=True).decode("utf-8") filename = "{}.html".format(os.path.basename(memo)) filename = os.path.join(HTML_PATH, filename) with open(filename, "w", encoding="utf-8") as file: file.write("<!DOCTYPE html>") file.write(html) except Exception as e: print(e) 

restituisce qualcosa di simile ..

<!DOCTYPE html> <html lang="en_UK"> <head> <style> body {background-color: powderblue;} #title {color: red; font-size: 300%;} .content {color: green;} </style> <meta charset="UTF-8"/> <title>==PROGRAMMING==</title> </head> <body> <span> ==PROGRAMMING== </span> &nbsp;&mdash;&nbsp; <span> <script type="text/javascript" timestamp="1551038092051"> /* <![CDATA[ */ var ts = document.currentScript.getAttribute("timestamp") document.write(""+ts+": "+Date(ts).toLocaleString()); /* ]]> */ </script> </span> <div class="content"> <p value="memo2" >=====</p> <p>https://medium.freecodecamp.org/</p> <p>=====</p> </div> </body> </html> 

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *