4D v11には、文字コードの扱いを制御する環境設定がある。v13とは異なり、データベース設定も環境設定メニューにあります。
環境設定の「アプリケーション」の「互換性」メニューに「Unicodeモード」というチェックボックスがあります。v11で新しくプロジェクトを作成した場合、Unicodeモードはチェックされていますが、たとえばv2004のプロジェクトをv11にコンバートした場合はUnicodeモードがチェックされていません。
このおかげでどういうことが起こるかというと...
非Unicodeモードでは、Positionコマンドで取得した文字列中のポジションは文字数を示していますが、Substringコマンドでその文字数を切り出すと、すでにUnicodeですので、期待していた長さとバイト数が異なってしまう、現象が起こります。
v11で作成した、Jiro_str_Extractというかなり実績のあるプログラムを、この元v2004の今はv11のプロジェクトにコピーして使ったときに起こりました。Jiro_str_Extractはさんざんテストされていたのに、なぜか変な結果を返す、ポジションを示す数値は合っているのに切り出される文字列が、文字の途中で切れてしまう、という現象が起きます。
【環境設定】→【アプリケーション】→【互換性】で「Unicodeモード」がチェックされていませんでした。これをチェックしたら問題は解決しました。ちなみにv13にコンバートしても問題は解決します。これで気づきました。
サポートにも問い合わせて裏は取りました。古いプロジェクトを扱うときは注意しましょう。