for X: = 0 for len do
This should be a use len-1, otherwise you will go beyond both the array and the string.
Unicode , , , , string , ASCII, UTF-16. SysUtils.TEncoding string Delphi, Java, :
function StringToJA(Data: String): TJavaArray<Byte>;
var
Arr: TBytes;
len, X: integer;
begin
Arr := TEncoding.Default.GetBytes(Data);
len := Length(Arr);
Result := TJavaArray<Byte>.Create(len);
for X := 0 to len-1 do
Result.Items[X] := Arr[X];
end;
:
function StringToJA(Data: String): TJavaArray<Byte>;
var
Arr: TBytes;
len: integer;
begin
Arr := TEncoding.Default.GetBytes(Data);
len := Length(Arr);
Result := TJavaArray<Byte>.Create(len);
if len > 0 then Move(Arr[0], Result.Data^, len);
end;
?
txt.getBytes(codeL);
sendText[2]=(byte)a;
, TEncoding, :
function StringToJA(Data: string; charset: String = ''): TJavaArray<Byte>;
var
Encoding: TEncoding;
Arr: TBytes;
len: integer;
begin
if charset <> '' then
Encoding := TEncoding.GetEncoding(charset)
else
Encoding := TEncoding.Default;
Arr := Encoding.GetBytes(Data);
len := Length(Arr);
Result := TJavaArray<Byte>.Create(len);
if len > 0 then Move(Arr[0], Result.Data^, len);
end;
var
txt: string;
data : TJavaArray<Byte>;
sendText : TJavaArray<Byte>;
begin
txt := 'SOME TEXT...ščž';
data := StringToJA(txt, 'iso8859-2');
sendText := TJavaArray<Byte>.Create(3);
sendText.Items[0] := $1B;
sendText.Items[1] := $74;
sendText.Items[2] := Byte(23);
ostream.write(sendText);
ostream.write(data);