diff --git a/fhem/FHEM/01_FHEMWEB.pm b/fhem/FHEM/01_FHEMWEB.pm index 01fe1f733..17c8f38ca 100644 --- a/fhem/FHEM/01_FHEMWEB.pm +++ b/fhem/FHEM/01_FHEMWEB.pm @@ -425,6 +425,8 @@ FW_Read($$) $data = pack("C*", map { $_ ^ $m[$idx++ % 4] } unpack("C*", $data)); } + $data = Encode::decode('UTF-8', $data) if($unicodeEncoding && $op == 1); + my $ret = FW_fC($data); FW_addToWritebuffer($hash, FW_longpollInfo("JSON", defined($ret) ? $ret : "")."\n"); @@ -562,6 +564,7 @@ FW_Read($$) $FW_headerlines. "\r\n" ); $FW_chash->{websocket} = 1; + delete($FW_chash->{encoding}); # WS specifies its own encoding my $me = $FW_chash; my ($cmd, $cmddev) = FW_digestCgi($arg); diff --git a/fhem/FHEM/DevIo.pm b/fhem/FHEM/DevIo.pm index 93428600b..76660cc33 100644 --- a/fhem/FHEM/DevIo.pm +++ b/fhem/FHEM/DevIo.pm @@ -231,7 +231,10 @@ DevIo_DecodeWS($$) # $op: 0=>Continuation, 1=>Text, 2=>Binary, 8=>Close, 9=>Ping, 10=>Pong Log3 $hash, 5, "Websocket msg: OP:$op LEN:$len MASK:$mask FIN:$fin"; - if($op == 8) { # Close + if($op == 1) { # Text + $data = Encode::decode('UTF-8', $data) if($unicodeEncoding); + + } elsif($op == 8) { # Close my $clCode = unpack("n", substr($data,0,2)); $clCode = "$clCode ($wsCloseCode{$clCode})" if($wsCloseCode{$clCode}); $clCode .= " ".substr($data, 2) if($len > 2); @@ -276,7 +279,10 @@ DevIo_SimpleWrite($$$;$) $hash->{USBDev}->write($msg); } elsif($hash->{TCPDev}) { - $msg = DevIo_MaskWS($hash->{binary} ? 0x2:0x1, $msg) if($hash->{WEBSOCKET}); + if($hash->{WEBSOCKET}) { + $msg = Encode::encode('UTF-8', $msg) if($unicodeEncoding && !$hash->{binary}); + $msg = DevIo_MaskWS($hash->{binary} ? 0x2:0x1, $msg) + } syswrite($hash->{TCPDev}, $msg); } elsif($hash->{DIODev}) {