Umwandlungen (Satzzeichen)

Übersicht BlitzMax, BlitzMax NG Allgemein

Neue Antwort erstellen

Mathias-Kwiatkowski

Betreff: Umwandlungen (Satzzeichen)

BeitragDo, Aug 18, 2016 11:15
Antworten mit Zitat
Benutzer-Profile anzeigen
ich weiß gar nicht wie ich mein problem beschreiben soll. ich lasse eine webseite nach einem namen suchen...

So wird es auf der webseite angezeigt:
•ΛЦЯØŘΛ•

im sorce steht es allerdings so:
•ΛЦЯØŘΛ•

wie genau ist den nun die umwandlung?
also von dem ersten in dem zweiten?
weil das untere also das zweite ist es was ich brauche.

ich hoffe das ich mein problem gut beschrieben habe und das es hier auf der webseit so angezeigt wird wie es soll^^...
Skype: Anarchie1984
http://projektworks.de/maxbase/
Icq - Erneuert am 21.08.2017
Yahoo - Erneuert am 21.08.2017

Midimaster

BeitragDo, Aug 18, 2016 11:31
Antworten mit Zitat
Benutzer-Profile anzeigen
hat das vielleicht was mit UTF zu tun? Brucey hat mir mal geschrieben dass man bei LoadFile so ne Art "UFT-Header" vor den String setzen kann:
BlitzMax: [AUSKLAPPEN]
Local Stream:TStream
Stream=ReadFile ("utf8::" + "Translation.Txt")


Das war bei mir für Tschechisch und Russisch notwendig. Weiß aber nicht ob das irgendwas mit deinem Problem zu tun hat....
Gewinner des BCC #53 mit "Gitarrist vs Fussballer" http://www.midimaster.de/downl...ssball.exe

Mathias-Kwiatkowski

BeitragDo, Aug 18, 2016 11:40
Antworten mit Zitat
Benutzer-Profile anzeigen
was wäre wenn ich es im string habe? und nich als stream?

(es hat voll was mit mein prob zu tun^^)
Skype: Anarchie1984
http://projektworks.de/maxbase/
Icq - Erneuert am 21.08.2017
Yahoo - Erneuert am 21.08.2017

Midimaster

BeitragDo, Aug 18, 2016 13:35
Antworten mit Zitat
Benutzer-Profile anzeigen
also, wenn ich den quelltext der Internetseite http://www.bigpoint.com/darkor...pvm.95313/ als html speichere und ihn dann in EditPad Pro wieder öffne, sehe ich noch die Originalzeichen wie auf der Homepage. Wandeln ich dann dort das ganze in "ASCII + Unicode-Escapes" wird ziemlich genau das daraus, was Du in deinem Quellcode siehsts:

user posted image
Gewinner des BCC #53 mit "Gitarrist vs Fussballer" http://www.midimaster.de/downl...ssball.exe

Mathias-Kwiatkowski

BeitragDo, Aug 18, 2016 13:39
Antworten mit Zitat
Benutzer-Profile anzeigen
das stimmt wohl nur habe ich kein plan wie ich etwas was in einem string steht umwandeln kann.
muss ich die satzzeichen dafür selbst eingeben? und den string durchlaufen lassen? und dann ein neuen string basteln?
Skype: Anarchie1984
http://projektworks.de/maxbase/
Icq - Erneuert am 21.08.2017
Yahoo - Erneuert am 21.08.2017

Midimaster

BeitragDo, Aug 18, 2016 13:45
Antworten mit Zitat
Benutzer-Profile anzeigen
Woher kommt/kam denn der zweite String? So wie ich das sehe, bedeutet beides inhaltlich das gleiche. Es handelt sich nur um eine andere Darstellung (andere UTF-Codierung)....

Beschreibe bitte nochmal genau was Du erreichen willst? Ist der erste oder der zweite Text die für Dich "brauchbare" Form. Was ist das Ziel deines Programm-Codes?
Gewinner des BCC #53 mit "Gitarrist vs Fussballer" http://www.midimaster.de/downl...ssball.exe

Mathias-Kwiatkowski

BeitragDo, Aug 18, 2016 13:53
Antworten mit Zitat
Benutzer-Profile anzeigen
ja und ich wollte wissen wie ich das in der anderen darstellung umwandle natürlich von bm aus...

der 2. string kommt von -< curl >-
Skype: Anarchie1984
http://projektworks.de/maxbase/
Icq - Erneuert am 21.08.2017
Yahoo - Erneuert am 21.08.2017

Midimaster

BeitragDo, Aug 18, 2016 13:57
Antworten mit Zitat
Benutzer-Profile anzeigen
hilft denn ein Umweg über einen Stream nicht weiter? Oder abspeichern/wiederladen? Wie gesagt, da kannst Du bestimmte Codierungswünsche als Header vornedran stellen...
Gewinner des BCC #53 mit "Gitarrist vs Fussballer" http://www.midimaster.de/downl...ssball.exe

Xeres

Moderator

BeitragDo, Aug 18, 2016 23:07
Antworten mit Zitat
Benutzer-Profile anzeigen
The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets (No Excuses!)

Die Webseite sollte das Charset angeben, hoffentlich <meta charset="utf-8"> - Dein Editor sollte die Zeichen als UTF-8 interpretieren können (sieht danach aus, als würde eins von beidem nicht der Fall sein).
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)

Mathias-Kwiatkowski

BeitragMo, Aug 22, 2016 6:08
Antworten mit Zitat
Benutzer-Profile anzeigen
stimmt, mein editor muss es umwandeln, aber wie... muss ich das charset irgendwie eingeben? oder kann man ein modul laden was es übernimmt? oder kann es blitz von selbst irgendwie ^^?

kenn mich damit 0 aus also mit chartset ect.

und mit utf-8

was ich gefunden habe (was aber nicht funktioniert)

Code: [AUSKLAPPEN]
Function UTF8:String(Unicode:String)
   Local RESULT$=""
   
   For Local i:Int = 1 To Len(Unicode:String)
      Local Char$=Mid$(Unicode$,i,1)
      If Asc(Char$)<128
         result$=result$+char$
      ElseIf Asc(Char$)>127 And Asc(Char$)<2048
         Local Bytes$=Right$(Bin$(Asc(Char$)),11)

         Local Byte1$="110"+Left$(Bytes$,5)
         RESULT:String = RESULT:String + Chr(Bin2Int(Byte1:String))

         Local Byte2$="10"+Right$(Bytes$, 6)
         Result$=Result$+Chr(Bin2Int(Byte2$))
      Else
         Local Bytes$=Right$(Bin$(Asc(Char$)),16)

         Local Byte1$="1110"+Left$(Bytes$,4)
         Result$=Result$+Chr(Bin2Int(Byte1$))

         Local Byte2$="10"+Mid$(Bytes$, 5, 6)
         Result$=Result$+Chr(Bin2Int(Byte2$))

         Local Byte3$="10"+Right$(Bytes$, 6)
         Result$=Result$+Chr(Bin2Int(Byte3$))      
      EndIf
   Next
   Return Result$
EndFunction
Function Bin2Int:Int(Binary:String)
   Local result:Int = 0
   Local D:Int = 1
   For Local i:Int = Len(Binary:String) To 1 Step - 1
      If Mid:String(Binary:String, i, 1) = "1" Then result = result + d
      D = D + D
   Next
   Return result
EndFunction
Skype: Anarchie1984
http://projektworks.de/maxbase/
Icq - Erneuert am 21.08.2017
Yahoo - Erneuert am 21.08.2017

kog

BeitragMo, Aug 22, 2016 9:01
Antworten mit Zitat
Benutzer-Profile anzeigen
Versuch mal das/der https://de.wikipedia.org/wiki/Byte_Order_Mark zu verwenden beim Speichern der Datei von BlitzMax.

Code: [AUSKLAPPEN]
WriteByte($EF)
WriteByte($BB)
WriteByte($BF)
Windows 7 Home Premium 64bit
CPU: Intel Core i5 3450 Ivy Bridge
GPU: HIS HD 4870 1GB GDDR5
RAM: 4x 4GB DDR3-SDRAM Dual Channel
 

sinjin

BeitragDo, Aug 25, 2016 4:05
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich schliesse mich Midimaster an, den Stream musst du ja nicht auf "Diskette" speichern, man kann doch eine Bank im Speicher anlegen und darauf nen Stream anwenden? Nichts passiert auf der Festplatte, nur im Speicher.

Mathias-Kwiatkowski

BeitragMi, Aug 31, 2016 10:07
Antworten mit Zitat
Benutzer-Profile anzeigen
habe eine lösung gefunden, sieht scheinbar auch gut aus.

habs nun paar tage getestet und ich bin zufrieden, für alle die es interessiert.


die funktion ist nicht von mir. ich habe irgendwo auf google gesammelt ^^... daher danke am uhrheber wer es auch immer sei...
Code: [AUSKLAPPEN]
Function UTF8:String(Unicode:String)
   Local text:String = unicode
   Local array:Byte[text.length]

   For Local i:Int = 0 Until text.length
      array[i] = text[i]
   Next

   Local dec_text:String = TUTF8.utf8ToString(array)

   Local utf8_text:String
   For Local i:Int = 0 Until dec_text.length
      Local res:Byte[] = TUTF8.fromInt(dec_text[i])
      For Local b:Int = EachIn res
         utf8_text:+Chr(b)
      Next
   Next
   
   Return dec_text
EndFunction

Type TUTF8
   Function getlength:Int(i:Int)
      Select True
         Case i<$7f                  Return 1
         Case i=>$7f And i<$7ff         Return 2
         Case i >= $7ff And i < $ffff Return 3
         Case i=>$ffff And i<$1fffff      Return 4
         Case i=>$1fffff And i<$3ffffff   Return 5
         Case i=>$3ffffff And i<$7ffffff   Return 6
      End Select
   End Function
   
   Function fromInt:Byte[](code:Int)
      Local value:Byte[]
      Local length:Int = getlength(code)
      value = New Byte[length]
      Select length
         Case 1
            value[0] = code
         Case 2
            value[0] = 192+(code/64)
            value[1] = 128+(code Mod 64)
         Case 3
            value[0] = 224+(code/4096)
            value[1] = 128+((code/64) Mod 64)
            value[2] = 128+(code Mod 64)
         Case 4
            value[0] = 240+(code/262144)
            value[1] = 128+((code/4096) Mod 64)
            value[2] = 128+((code/64) Mod 64)
            value[3] = 128+(code Mod 64)
         Case 5
            value[0] = 248+(code/16777216)
            value[1] = 128+((code/262144) Mod 64)
            value[2] = 128+((code/4096) Mod 64)
            value[3] = 128+((code/64) Mod 64)
            value[4] = 128+(code Mod 64)
         Case 6
            value[0] = 252+(code/1073741824)
            value[1] = 128+((code/16777216) Mod 64)
            value[2] = 128+((code/262144) Mod 64)
            value[3] = 128+((code/4096) Mod 64)
            value[4] = 128+((code/64) Mod 64)
            value[5] = 128+(code Mod 64)
      End Select
      Return value
   End Function 
   
   Function utf8ToString:String(_data:Byte[])
      Local length:Int,str:String,b:Int,x:Int
      For Local i:Int = 0 Until _data.length
         b=_data[i]
         length = getlength(b)
         If (i+length-1)>_data.length Exit
         Select length
            Case 1
               x=b
            Case 2
               x=( ((b-192)*64) + (_data[i+1]-128) )
            Case 3
               x=( ((b-224)*4096) + ((_data[i+1]-128)*64) + (_data[i+2]-128) )
            Case 4
               x=( ((b-240)*262144) + ((_data[i+1]-128)*4096) + ((_data[i+2]-128)*64) + (_data[i+3]-128))
            Case 5
               x=( ((b-248)*16777216) + ((_data[i+1]-128)*262144) + ((_data[i+2]-128)*4096) + ((_data[i+3]-128)*64) + (_data[i+4]-128))
            Case 6
               x=( ((b-252)*1073741824) + ((_data[i+1]-128)*16777216) + ((_data[i+2]-128)*262144) + ((_data[i+3]-128)*4096) + ((_data[i+4]-128)*64) + (_data[i+5]-128))
         End Select
         str:+Chr(x)
         i:+(length-1)
      Next
      Return str
   End Function 
   
End Type
Skype: Anarchie1984
http://projektworks.de/maxbase/
Icq - Erneuert am 21.08.2017
Yahoo - Erneuert am 21.08.2017

Neue Antwort erstellen


Übersicht BlitzMax, BlitzMax NG Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group