Register for your free account! | Forgot your password?

Go Back   elitepvpers > Other Online Games > Diablo 2 > Diablo 2 Programming
You last visited: Today at 14:07

  • Please register to post and access all features, it's quick, easy and FREE!

Advertisement



D2NT text file Charset Problem

Discussion on D2NT text file Charset Problem within the Diablo 2 Programming forum part of the Diablo 2 category.

Closed Thread
 
Old   #1
 
elite*gold: 0
Join Date: Sep 2011
Posts: 7
Received Thanks: 0
D2NT text file Charset Problem

Hallo,
ich arbeite gerade an einem Mule Item Manager in java, beim auslesen des Itemlogs stoße ich allerdings auf ein Problem.

Nach jedem Zeichen ist nochmals ein whitespace (siehe bild). Dieses Problem tritt bei jeder von mir getesteten d2nt version auf mit der ich text in eine file schreibe.

z.B.
file.WriteLine(item.itemtype);
file.WriteLine(item.quality);
file.WriteLine(removeColor(item.itemdesc));

Meine Versuche mit dem InputStreamReader die file mit diversen charsets zu öffnen blieb erfolglos.

Hat jemand eine Idee wo der Fehler liegen könnte?
bzw. einen Lösungsansatz?

Wenn ich die textfile mit notepad++ öffne und zu ANSI codiere funktioniert es.

mfg exi
Attached Images
File Type: jpg output-java.jpg (11.4 KB, 11 views)
exilotus is offline  
Old 12/03/2011, 00:21   #2
 
sataan1337's Avatar
 
elite*gold: 0
Join Date: Dec 2008
Posts: 628
Received Thanks: 108
Moin

wenn du mal eine Beispiel-Logdatei und ein Java-Codesnippet hochlädst lässt sich der Fehler eventuell eher ausfindig machen

ich bastel gerade an nem ähnlichen Projekt für die Hochschule und werde mich dabei auf Muddy's D2NT beschränken. Um die Pickit-Logs einzulesen hatte ich vor geraumer Zeit schonmal was angefangen dass die XML-Logs in ne relationale Datenbank packt, an dem code der diese XML-Logs erstellt könntest da sicherlich ansetzen, die lassen sich in java vernünftig auslesen. (und xml ist nebenbei noch wesentlich schöner ^^)
Die Dateien die dabei für den Mule-Manager geschrieben werden hab ich leider auch noch nicht wirklich lesbar codiert bekommen, ich hatte an der Stelle angenommen die kryptischen Sonderzeichen hätten eventuell was mit den Farbcodes zu tun

pS.: in deinem Screenshot find ich grad den Fehler nicht ^^
sataan1337 is offline  
Old 12/03/2011, 02:05   #3
 
elite*gold: 0
Join Date: Sep 2011
Posts: 7
Received Thanks: 0
java item log einlesen:

Code:
in = new BufferedReader(new InputStreamReader(new FileInputStream(file)));
do
{
	line = in.readLine();
	//System.out.println(line);
	
	if(line != null)
	{
		if(!line.contains("Unidentified"))
		{
			if(line.startsWith(" "))
				line = line.replaceFirst(" ", "");
			content.add(line);
		}
	}
}
while(line != null);

Ausgabe so wie der d2nt es in die text file schreibt.

Ausgabe nachdem ich die text file im notepad++ zu ANSI konvertiert habe (Kodierung-> Konvertieren zu ANSI).
Wie man sieht ist die Nicht ANSI konvertierte version doppelt so groß was sich durch die zusätlichen whitespaces erklärt.

Im Anhang findet ihr noch die beiden Item Logs sowie gepackt in einer .zip da die text files vll beim speicher/upload vorgang verändert werden könnten.

js code vom d2nt
Code:
function NTU_TLInventory() {
	NTConfig_TLInventory_SkipEquipped   = true;         // true = just log stash and inventory
	NTConfig_TLInventory_Delimeter      = "-";            // output file delimiter - see function TTL_WriteIt()
	NTConfig_TLInventory_SortOrder      = "QUALITY|TYPE|CLASS|NAME";
	
	Print(COLOR_3 + "[Toothless Inventory] - Load");
   
	TLI_DoIt();
	Print ("Finished");
}
function TLI_DoIt(verbose) {
	Print ("Attempting to log inventory ...");
   
   	if(arguments.length < 1)
		var verbose = false;
		
	var items = me.GetItems();
	items.sort(function(a, b){
		var nameA=a.name.toLowerCase(), nameB=b.name.toLowerCase()
		if (nameA < nameB) //sort string ascending
			return -1
		if (nameA > nameB)
			return 1
		return 0 //default return value (no sorting)
	});
	var logged = new Array();
	if (items) {
		for(var i = 0 ; i < items.length ; i++) {
			item = items[i];
			ignore = _NTT_IgnoredItems.join("-");
			ignore += "-box";
         
			if(ignore.indexOf(item.code) == -1) {
				if(!NTConfig_TLInventory_SkipEquipped)
					logged.push(item);
				else if (item.mode == 0)
					logged.push(item);
			}
		}
		if (logged.length) {
			var fileName = "logs/" + me.account + "." + me.name + ".txt";
			_file = FileOpen(fileName, 1);
			if (_file) {
				for (var i = 0; i < logged.length; i++)
					TLI_LogItem(_file, logged[i], verbose);
				_file.Close();
				Print (COLOR_2 + logged.length + " items written to - " + fileName + " -");
			}
			else
				Print(COLOR_1 + "Unable to write file to - " + fileName);
		}
		else
			Print(COLOR_1 + "No items on this character to log");
	}
	else
		Print(COLOR_1 + "No items on this character to log");
}
function TLI_LogItem(file, item, verbose) 
{
	var UNIDtext = "";
	
	if (!(item.itemflag & 0x10)) 
	{
		for (var qual in _NTIPAliasQuality) 
		{
			if (_NTIPAliasQuality[qual]==item.quality) UNIDtext+=qual.charAt(0).toUpperCase() + qual.substr(1) + "/";
		}
		
		var s = item.itemdesc;
		s = s.replace(REGEX6, REPLACE6); 
		var def = s.match(/.*(Defense: \d+).*/);
		
		if (def!=null) 
		{
			def[0] = def[0].replace(/Defense:/,"Def");
			UNIDtext += def[0]+"/";
		}
		
		UNIDtext += "Unidentified";
		if (item.itemflag & 0x400000) UNIDtext+="/Ethereal";
			file.WriteLine(UNIDtext);
	}
	else
	{
		file.WriteLine(item.itemtype);
		file.WriteLine(item.quality);
		file.WriteLine(removeColor(item.itemdesc));
		file.WriteLine("NEXT_ITEM");
	}
}

function removeColor(s)
{
	s = s.replace(REGEX6, REPLACE6);
	return s;
}
mfg exi

Edit:
habe gerade nochmal ein test durchgeführt und anscheint liegt es Nicht an Java. Da c++ die gleichen whitespace probleme hat.

Code:
#include <cstdlib>
#include <iostream>
#include <fstream>

using namespace std;

int main(int argc, char *argv[])
{
    ifstream f;
    string s;
    f.open("test-log.txt", ios::in);
    while (!f.eof())
    {
        getline(f, s);
        cout << s << endl;
    }
    f.close();
    
    system("PAUSE");
    return EXIT_SUCCESS;
}
Gibt es vll jemanden der dieses Problem schonmal hatte? vll muddy bei seinem mule manager?
Attached Files
File Type: txt falsch.txt (5.5 KB, 1 views)
File Type: txt richtig - ANSI.txt (2.7 KB, 1 views)
File Type: zip log.zip (2.6 KB, 0 views)
exilotus is offline  
Old 12/03/2011, 10:54   #4
Administrator
 
Muddy Waters's Avatar
 
elite*gold: 41364
Join Date: Jan 2010
Posts: 22,727
Received Thanks: 12,653
In dem Fall würde ich vermuten, dass dein InputStreamReader Objekt einfach von Haus aus ANSI Kodierung erwartet. Sollte sich aber eigentlich ändern lassen, indem du dem InputStreamReader Objekt bei der Instantiierung einfach mitteilst, welche Zeichenkodierung du verwenden möchtest (in dem Fall UTF-16LE i.e. UCS-2 Little Endian).

Bei meinem Mule Manager hatte ich das Problem nicht, da die StreamReader Klasse in C# von Haus aus UTF-8 einliest. Da UTF-8 und UCS-2 in der Praxis gleich sind, funktionierte bei mir alles auf Anhieb - C# ist eben toll.

LG
Muddy
Muddy Waters is offline  
Old 12/03/2011, 11:39   #5
 
elite*gold: 0
Join Date: Sep 2011
Posts: 7
Received Thanks: 0
Vielen dank @muddy
Standart charset war 8859-1 und nach umstellung auf utf-16(ohne le) funktioniert es einwandfrei.
Was mich eigentlich wundert, denn soweit mir bekannt ist, codiert java strings intern als utf-16, weshalb ich nur utf-8 getestet habe. ( UTF-8 funktionierte bei mir unter java NICHT )

Code:
in = new BufferedReader(new InputStreamReader(new FileInputStream(file), "UTF-16"));
/close plz
exilotus is offline  
Closed Thread


Similar Threads Similar Threads
suche d2nt stashlogger / stash to text 1.13d
11/12/2011 - Diablo 2 - 1 Replies
jo suche den neuesten d2nt stashlogger also den nt bot der mein kompletten mule char in ne txt datei umwandelt thx schonma :)
text binds via d2nt
07/31/2011 - Diablo 2 Programming - 3 Replies
kann man bestimmte texte auf tasten binden. z.B wenn ich aufm numblock die 1 drücke, schreibt der in game "follow me" für den automation follow bot z.b geht das ?
[Poll] Reading data from text file or database?
04/01/2011 - SRO Coding Corner - 11 Replies
Hi, I'm currently facing a little choice about how I should read the data of silkroad. So I hope that I can get a clear answer with this thread/poll. Well as you might know I'm using C++ and currently I'm reading the data into the memory which is just a big list of for example npc position objects. So yesterday I created a little test and I inserted all the npc positions into an MySQL database (version 5.1) and I used 10 different id's of npcs to get the positions. I runned this test...
d2nt write to file
05/27/2010 - Diablo 2 - 1 Replies
Hi zusammen - ich bin leider erst dabei den syntax von den scripts zu lernen und nachvollziehen - eventuell findest sich ja ein script-guru der das ganze etwas beschleunigt :P ich würde gerne von d2nt eine file schreiben lassen. im endeffekt sollen da die ganzen sachen mit timestamp rein, die in der itemlog auftauchen. sinn des ganzen ist, dass der bot auf nem anderen rechner läuft und ich das ganze gern hier auslesen würde :) bin von natur aus faul ^^ also kurzum -> will die itemlog...
AutoIt text file open?
01/29/2008 - AutoIt - 2 Replies
Hi, bin noch recht neu im bezug scripten mit autoit, bzw. alg. . Mein Frage ist ob es irgentwie möglich ist auch Text.txt filex per Interface zu öfnen. Der geht wenn ich in der Form auf "button" open klicke... öfnet sich die l,.exe!



All times are GMT +1. The time now is 14:07.


Powered by vBulletin®
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
SEO by vBSEO ©2011, Crawlability, Inc.
This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

Support | Contact Us | FAQ | Advertising | Privacy Policy | Terms of Service | Abuse
Copyright ©2025 elitepvpers All Rights Reserved.