УкраїнськаEnglishmRussian
Вход/Новый
В теме нет новых постов

JavaLikeCalc и обработка строковых констант UTF-8


Автор Сообщение
Сообщение создано: 30. 09. 2016 [12:52]
3dlogin
Илья Кузнецов
Создатель темы
Зарегистрирован(а) с: 06.04.2016
Сообщения: 12
Добрый день!

Был удивлён, когда "Тест".charAt(0) и "Тест"[0] не вернули "Т".
"Тест".length и проход по строке с использованием charCodeAt(i) конечно всё мне прояснили, однако в чём удобство такого поведения для пользователя OpenSCADA?
В конечном счёте пользователь может адаптировать код процедуры так, чтобы он соответствовал его ожиданиям, написать свои функции и пользовать их, однако мы же стремимся сделать OpenSCADA лучше и удобнее.

Предлагаю следующее:
для кода
JAVASCRIPT
testString = "Тест";
testStringLength = testString.length;
testCharAt0 = testString.charAt(0);  // testString[0] сюда же
testStringArray = new Array();
for (i = 0; i < testStringLength; i++)
  testStringArray.push(testString.charCodeAt(i));


вместо результата


testStringLength -> 8
testCharAt0 -> "" (код символа 208, в поле такого атрибута будет пусто)
testStringArray ->
<TArrayObj>
<int>208</int> // 0xD0
<int>162</int> // 0xA2
<int>208</int> // 0xD0
<int>181</int> // 0xB5
<int>209</int> // 0xD1
<int>129</int> // 0x81
<int>209</int> // 0xD1
<int>130</int> // 0x82
</TArrayObj>



получать


testStringLength -> 4
testCharAt0 -> "Т"
testStringArray ->
<TArrayObj>
<int>53410</int> // 0xD0A2 -- байты UTF-8 для номера символа "Т" U+0422
<int>53429</int> // 0xD0B5 -- байты UTF-8 для номера символа "е" U+0435
<int>53633</int> // 0xD181 -- байты UTF-8 для номера символа "с" U+0441
<int>53634</int> // 0xD182 -- байты UTF-8 для номера символа "т" U+0442
</TArrayObj>



или, что ещё логичнее, получать в charCodeAt(i) номер символа UTF-8, в который и Latin1 кстати входит:
JAVASCRIPT
testString = "Sи";
testStringArray = new Array();
for (i = 0; i < testString.length; i++)
  testStringArray.push(testString.charCodeAt(i));
/*
<TArrayObj>
<int>83</int>  // 0x53  -- номер символа "S" U+0053
<int>1080</int>  // 0x438  -- номер символа "и" U+0438
</TArrayObj>
*/


Что думаете, товарищи разработчики?
Сообщение создано: 30. 09. 2016 [12:56]
roman
Roman Savochenko
Moderator
Contributor
Developer
Зарегистрирован(а) с: 12.12.2007
Сообщения: 3750
"3dlogin" wrote:

Что думаете, товарищи разработчики?

Ничего не думаю поскольку меня всё устраивает!

Learn, learn and learn better than work, work and work.
Сообщение создано: 17. 12. 2018 [11:45]
roman
Roman Savochenko
Moderator
Contributor
Developer
Зарегистрирован(а) с: 12.12.2007
Сообщения: 3750
"roman" wrote:

"3dlogin" wrote:

Что думаете, товарищи разработчики?

Ничего не думаю поскольку меня всё устраивает!

Расширил charCodeAt(), charAt() и добавил strFromCharUTF() для работы с UTF!

Learn, learn and learn better than work, work and work.



21683