Deschiderea fișierelor .memo din aplicația de memorie implicită Samsung

Am fișiere .memo pe computerul meu din aplicația de memorie implicită pe un telefon Samsung deținut anterior. Când sunt deschise în Notepad, fișierele nu conțin text simplu. Cum pot recupera conținutul notelor?

Răspunde

Utilizând playerul VLC sau descărcând Samsung Note pentru PC așa cum s-a menționat aici

Metode corelate menționate aici pentru export – consultați Răspunsul lui Husni din fișierul zip soluție și altele

Cum pot exporta note Samsung?

Răspuns

Am scris propriul meu convertor „memo2txt” în Python. Iată scriptul (mai întâi va trebui să instalați libs Python folosind 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 

Răspuns

inspirat de beeshyams, aici este versiunea mea …

pe Samsung J3, memo-urile sunt într-o unitate MTP undeva ca …

SAMSUNG Android/Phone/ShareMemo/*.memo

xml-ul sursă arată cam așa:

<?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> 

Execut această transformare xslt peste ea …

 <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> 

folosind lxml din 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) 

generează ceva de genul …

<!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> 

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *