1. 程式人生 > >讓你的文件能在諾基亞“當前備忘 (ActiveNotes)”中開啟編輯

讓你的文件能在諾基亞“當前備忘 (ActiveNotes)”中開啟編輯

很喜歡諾基亞手機裡的“當前備忘”這個自帶的軟體,一直希望能夠用它開啟編輯自己的文件。早些時候,曾嘗試做過一些努力,發現自己生成的HTML格式文件在裡面一開啟就提示格式不支援,然後文件就被刪除了。
一直以為是自己沒弄清裡邊的an_nuid data和an_duid data標籤的含義,故而很快自己就放棄嘗試,轉向自定義網頁格式閱讀這方面。
直到今天早上,自己下定決心要探求一番。先是用各種搜尋想知道an_nuid data這個欄位的含義是什麼,無論是Baidu,還是Bing,還是Google,都沒有找到有價值的東西。反倒是Google,居然把我以前寫的部落格給倒騰出來了。
沒辦法只好自己開始反覆的試驗。
首先,自己假定,an_nuid data是和文字內容相關的東西,那麼對於同樣的文字內容,這個欄位的東西是應該相同的。在手機裡生成的文件對比發現,不同。那麼假設不成立了。同時,也發現,an_duid data這個欄位,無論什麼文件,都是不變的,我的手機是Nokia5320di,這個欄位是<an_duid data=\"9f8e2bee6b38ca3f4a18a381ec01c890\"/>。我推測,應該不同的型號的諾基亞手機這個是不同的。不過,手頭裡沒有其他型號,也無法驗證。作罷。
既然這樣,我就可以固定一個欄位了,另一個欄位an_nuid data,既然與文件無關,就隨便寫個試試看。
先是直接在文件裡修改,將原先的內容直接替換成自己的內容,導到手機裡的Activenotes資料夾裡,開啟,發現可以。
繼續試驗,用以前自己寫的Txt2Html程式生成的HTML檔案在記事本開啟,然後與手機生成的HTML檔案逐一對比,格式儘量做到和它一致。
導到手機裡試驗後,發現Activenotes對<br>標籤不識別,於是按照它分段的方法,用<p></p>標籤修改程式。
經過這麼一番修改,導到手機裡,發現果然可以開啟編輯了。
到這一步還沒完,於是繼續試驗,逐個將開始改的再改回來,看那些因素究竟是不是有決定性影響。發現,其實去掉an_nuid data和an_duid data欄位,Activenotes依然可以開啟編輯,而body{}裡的格式控制符也是無關緊要的。但是,當編輯儲存之後,an_nuid data和an_duid data欄位會自動新增進去,body{}裡的格式控制符,也將修改為固定的background-color: #FFFF88; font-family: arial; 。因此原先的作為Txt2Html程式控制格式的引數變得多餘了。

下面貼出今天上午半天的“探索”成果,Txt2Html的核心程式碼,這是在原先部落格中文字轉網頁dll原始碼中修改的:

// txt2html.cpp : Defines the entry point for the DLL application.
//

#include "stdafx.h"
#include "txt2html.h"


using namespace std;

string& replaceAll(string& context,const string& from,const string& to);

unsigned long infoLog;

BOOL APIENTRY DllMain( HANDLE hModule, 
					  DWORD  ul_reason_for_call, 
					  LPVOID lpReserved
					  )
{
    return TRUE;
}

unsigned long GetInfoLog()
{	
	return infoLog;	
}

int Txt2Html(char *file, char *para)
{
	// file Title List
	// 定義檔案變數
	
	string inFilePath,outFilePath,fileExtName,fileTitle;
	string filePathName;
	
	// 解析檔案引數
	inFilePath=string(file);
	size_t lastPoint=inFilePath.rfind('.');
	size_t lastDivd=inFilePath.rfind('\\');
	
	fileExtName=inFilePath.substr(lastPoint+1,3);
	fileTitle=inFilePath.substr(lastDivd+1,lastPoint-lastDivd-1);
	filePathName=inFilePath.substr(0,lastDivd+1);
	
	if(fileExtName.compare("txt")&&fileExtName.compare("TXT"))
	{
		infoLog=ERROR_INVALID_PARAMETER;
		return 1;
	}	
	
	string strLine;
	
	inFilePath=filePathName+fileTitle+string(".txt");
	outFilePath=filePathName+fileTitle; // 生成臨時檔案
	
	ifstream inFile(inFilePath.c_str());
	if(!inFile)
	{
		infoLog=GetLastError();
		return 1;
	}
	
	ofstream outFile(outFilePath.c_str(),ios::binary);
	if(!outFile)
	{
		infoLog=GetLastError();
		return 1;
	} 
	// generate file head 
	outFile<<"<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
		<<"<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n"
		<<"<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n"
		<<"<meta http-equiv=\"Content-Type\" content=\"text/html;charset=UTF-8\" />\n"
		<<"<title>"<<fileTitle<<"</title>\n"
		<<"<style type=\"text/css\">\nbody {"
		<<"background-color: #FFFF88; font-family: arial;"
		<<" }\nimg {border: none;}\n</style>\n"
		<<"</head>\n<body>\n";
	
	for(;;)
	{
		if(inFile.eof())break;
		
		getline(inFile,strLine,'\n');
		
		if(!strLine.empty())
		{			
			replaceAll(strLine,"&","&amp;"); // It should be the first
			
			replaceAll(strLine,"<","&lt;");
			replaceAll(strLine,">","&gt;");
			replaceAll(strLine,"  ","&nbsp;&nbsp;");
			replaceAll(strLine,"\"","&quot;");
			replaceAll(strLine,"\t","&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;");
		}
		
		outFile<<"<p><font>"<<strLine<<"</font></p>";				
	}
	
	outFile<<"</body></html>\n";
	
	inFile.close();
	outFile.close();	
	
	// 處理UTF-8轉碼

	inFilePath=filePathName+fileTitle;
	outFilePath=filePathName+fileTitle+string(".html");
	
	inFile.open(inFilePath.c_str(),ios::binary);
	if(!inFile.is_open())
	{
		infoLog=GetLastError();
		return 1;
	}
	
	outFile.open(outFilePath.c_str(),ios::binary);
	if(!outFile.is_open())
	{
		infoLog=GetLastError();
		return 1;
	} 
		
	
	ostringstream ansiTextStringStream;
	
	ansiTextStringStream<<inFile.rdbuf();
	
	string ansiTextString=string(ansiTextStringStream.str());
	
	int uniTextLength=MultiByteToWideChar(CP_ACP,NULL,ansiTextString.c_str(),ansiTextString.length(),NULL,0); // 獲得轉換緩衝區大小
	
	if(!uniTextLength) 
	{
		infoLog=GetLastError();
		return 1;
	}
	
	LPWSTR uniTextBuf = new WCHAR[uniTextLength];
	
	if(!MultiByteToWideChar(CP_ACP, NULL, ansiTextString.c_str(),ansiTextString.length(), uniTextBuf, uniTextLength))
	{
		infoLog=GetLastError();
		return 1;
	}
	
	int utf8TextLength=WideCharToMultiByte(CP_UTF8, NULL, uniTextBuf, uniTextLength, NULL,0,NULL,NULL);
	
	if(!utf8TextLength) 
	{
		infoLog=GetLastError();
		return 1;
	}
	
	LPSTR utf8TextBuf=new CHAR[utf8TextLength];
	
	if(!WideCharToMultiByte(CP_UTF8, NULL, uniTextBuf, uniTextLength, utf8TextBuf, utf8TextLength,NULL,NULL))
	{
		infoLog=GetLastError();
		return 1;
	}
	
	outFile.write(utf8TextBuf,utf8TextLength);
	
	if(uniTextBuf)
	{
		delete []uniTextBuf;
	}
	if(utf8TextBuf)
	{
		delete []utf8TextBuf;
	}
	
	
	inFile.close();
	outFile.close();
	
	DeleteFile(inFilePath.c_str());
		
	
	infoLog=1;
	return 0;
	
}

string& replaceAll(string& context,const string& from,const string& to)
{
	size_t lookHere = 0;
	size_t foundHere;
	while((foundHere=context.find(from,lookHere))!=string::npos)
	{
		context.replace(foundHere,from.size(),to);
		lookHere=foundHere+to.size();
		
	}
	return context;
}


相關推薦

諾基亞當前 (ActiveNotes)”開啟編輯

很喜歡諾基亞手機裡的“當前備忘”這個自帶的軟體,一直希望能夠用它開啟編輯自己的文件。早些時候,曾嘗試做過一些努力,發現自己生成的HTML格式文件在裡面一開啟就提示格式不支援,然後文件就被刪除了。 一直以為是自己沒弄清裡邊的an_nuid data和an_duid data標

如何vue的代碼在Sublime Text 3中高亮和智提示

sta sublime light 彩色 沒有 智能提示 tex syn package 大家寫在Sublime Text 3中編寫vue文件時,會發現沒有代碼智能提示,清一色的黑底白字,不會像html、js一樣變成彩色,給我們帶來了很大的不便。所以需要安裝一款叫作Vue

U盤誤刪的恢復

  能夠儲存數據的東西非常多,但是我們最常用的就是U盤了,如果我們在使用U盤的時候,不小心刪除了裏面的文件,那麽我們應該怎麽將我們U盤誤刪的文件恢復?和小編一起來看看吧! 如果我們想要恢復我們U盤裏面刪除的文件,那麽我們可以使用互盾數據恢復軟件這款專業的數據恢復軟件進行恢復操作。這款軟件功能強大,我們可

不給程式碼寫程式碼

這是程式設計師討論了很久的一個話題:要不要給程式碼寫文件?值得給程式碼寫文件嗎? 我曾經覺得這個話題實在是讓人難以應付。也認為除去一些特殊的情況(比如編寫公用 API),程式碼文件並不是那麼必要。直到有一天,我在一份程式碼檢查報告中發現,缺少文件被作為一項缺點指出來

log4j2配置ThresholdFilter,info記錄error日誌

.info 自動 exceptio 設置 方法 acc evel static logger 日誌級別: 是按嚴重(重要)程度來分的(如下6種): ALL < TRACE < DEBUG < INFO < WARN < ERROR <

u盤刪除的恢復嗎?如何恢復

點擊 過程 清理 follow 信息 是不是 其他 步驟 www u盤刪除的文件能恢復嗎?怎樣恢復。我們很多的時候都會使用我們的U盤去存儲一些數據,當然了這些數據對於我們來說也都是比較重要的,但你若是不小心刪除我們的U盤文件,我們該怎麽辦呢?   其實我們的在很多的時候,都

nginx配置任何在瀏覽器顯示本text/plain

plog oot time gin header 顯示 lai server 博文 例子 server { listen 81; root /var/www/applog; autoindex on;

的jenkins當奴隸主---說說幾種Jenkins build框架

改框架主要解決了單臺slave同時編譯多branch的軟體的時候的效率低下問題。由N個Jenkins Agent常駐於N個伺服器,由Master統一排程job執行在不同的Slave上。從而達到不同的branch編譯不會相互影響的情況,加速編譯、做包速度。而Master 只用於收集資料、展示資料。

ROS+科大訊飛語音=的機器人聽會說---(二)說話篇

(二)說話篇 基本環境配置 建立工作空間 $ mkdir -p ~/catkin_ws/src $ cd ~/catkin_ws/src $ catkin_init_workspace 首次編譯 $ cd ~/catkin_ws/

ROS+科大訊飛語音=的機器人聽會說---(一)環境搭建與準備

概述 ROS介紹 ROS是是用於機器人的一種次級作業系統。它提供類似作業系統所提供的功能,包含硬體抽象描述、底層驅動程式管理、共用功能的執行、程式間的訊息傳遞、程式發行包管理,它也提供一些

如何介面自動生成,SpringBootSwagger的使用

目錄 一、在SpringBoot專案中配置Swagger2 1、pom.xml中對Swagger2的依賴 2、編寫配置類啟用Swagger 3、配置實體類的文件 4、配置介面的文件

第四課:通過配置獲取對象(Spring框架的IOC和DI的底層就是基於這樣的機制)

ted const dex generate stat clas name 必須 nbsp 首先在D盤創建一個文件hero.txt,內容為:com.hero.Hero(此處必須是Hero的完整路徑) 接下來是Hero類 package com.hero; publi

plist無法打包進.a靜態庫

新建 null 進制 rac 是否 想法 dsm back lis 問題: 之前一直在做靜態庫的編寫與維護,也一直知道靜態庫的圖片資源是沒辦法打進.a中的。可是突然有個想法。由於有非常多參數的配置是在一個plist文件裏的。盡管也知道這是一個plist文件,可是想

使用VirtualBox的Linux鏈接外部夾外部直接訪問虛擬機的Docker操作步驟

輸入 虛擬 使用 直接 log 文件 http mod linux鏈接 先設置共享文件夾: 再在虛擬機中輸入一下指令: suusermod -G vboxsf user(只需要輸入一次,以後再添加的時候就不用輸入了)usermod -G vboxsf root(

delphi的bpl、dcp 、dcu意義(BPL相當於C++的DLL,DCP相當於C++的Lib,編譯時需要)

cti function 同時 就會 新建 art img runt 既然 BPL 英文全稱 Borland Package library ,是一種特殊的DLL文件,用於代碼重用和減少可執行文件。編譯bpl時,僅需要添加相應功能的pas文件,如果有窗體,

OSS重磅推出OSS Select——使用SQL選取的內容【免費公測

數據庫 OSS 摘要: OSS重磅推出OSS Select功能,可以直接使用簡單的SQL語句,從OSS的文件中選取所需要的內容對象存儲OSS(Object Storage Service)具有海量、可靠、安全、高性能、低成本的特點。OSS提供標準、低頻、歸檔類型,覆蓋多種數據從熱到冷的存儲需求,單個文

將新建添加回Ubuntu 18.04的右鍵選單

當我尋找方法時,我意識到將右邊的選單新增到我最喜歡的選項是一個簡單的方法。 因此,我將在本文中與您分享此提示。 有用的是主目錄中名為“模板”(英文版是Templates)的資料夾。 無論您在此資料夾中儲存什麼,Ubuntu基本上都將其視為模板。 我們將使用此資料夾來解決我們的小問題。 我們在Ubu

將word資料匯入到sql server資料庫

我現在的需求是這樣的,需要將這些題目插入到sql server資料庫中。 並且要對應起來,一開始在網上找了很多方法,都沒有找到合適的。 後面感覺,還是自己寫一個比較好,因為只有自己寫的,才是最適合你的! 於是就開始倒騰。 1、首先是讀取word中的資料,在我上

Kubernetes(k8s)中文 管理應用: 在生產環境使用Pods和容器_Kubernetes中文社群

譯者:張鑫 永久性儲存 容器中的檔案系統會隨著容器的停止而消失;如果容器重啟或出錯停止,則會使得容器檔案中的資料丟失,而且容器即使重新執行也會忘記之前的資料和狀態。如果需要比容器的生命更為長久的儲存方案,我們需要使用資料卷。這個需求對於有狀態服務更為重要,例如 資料庫,健-值儲存等。 舉例來說,Re

定製android主介面。自己寫的Android的Launcher成為系統第一個啟動的,也是唯一的Launcher.

由於是二次轉載, 沒招到原文連結, 敬請原作者諒解。 如果你要定製一個Android系統,你想用你自己的Launcher(Home)作主介面來替換Android自己的Home,而且不希望使用者安裝的Launcher來替換掉你的Launcher. 我們可以通過修改Frame