[vtkusers] VTK and Unicode

David Gobbi david.gobbi at gmail.com
Thu Jun 5 18:45:13 EDT 2014


Hi Maarten,

Yes, vtksys::Encoding::ToNarrow() requires a wchart_t *.  If you like to live
dangerously, you could just use a reinterpret_cast to convert your ushort *
to a wchar_t *, but to be safe you should allocate a wchar_t string of the
right size and then copy your ushort string into it.

VTK doesn't have any cmake options related to unicode.  All file-level stuff
in VTK always uses 8-bit strings no matter what build options you choose.

  David


On Thu, Jun 5, 2014 at 4:20 PM, Maarten Beek <beekmaarten at yahoo.com> wrote:
> It's complaining about the ToNarrow() function.
> (... symbol "__declspec(dllimport) <bla-bla> __cdecl
> vtksys::Encoding::ToNarrow(<bla-bla>) referenced in function <bla-bla> )
>
> I got the VS solution from svn before my unicode changes and added the
> ToNarrow() function and everything builds fine.
> I guess if I build my app with unicode, I should do this with VTK as well
> (how? don't see such an option in cmake...).
>
>
> However the app crashes in Debug, but not in Release.
> In another app, I need to set wchar_t as a build-in type to avoid the
> unresolved external symbol error, but then an ushort* (returned by
> QString::utf16()) cannot be cast to a wchar_t*... I guess ::ToNarrow(const
> wchar_t*) needs a ::ToNarrow(const ushort*) overload?
>
> Maarten
>
>
>
> On Thursday, June 5, 2014 5:03:56 PM, David Gobbi <david.gobbi at gmail.com>
> wrote:
>
>
> Hi Maarten,
>
> I use the functions in vtksys all the time.  Not specifically the
> Encoding functions, but they shouldn't be any different.
>
> You said it reported an unresolved symbol error... what symbol
> was it complaining about?
>
>   David
>
>
> On Thu, Jun 5, 2014 at 2:56 PM, Maarten Beek <beekmaarten at yahoo.com> wrote:
>> I am linking my app with vtksys.lib.
>>
>> But your answer also tells me I can use this function in my app.
>>
>> So it must be something else... maybe the fact that my vtk is built with
>> multibyte and the app with unicode?
>> Should find a function in vtksys that is unrelated to this to test.
>>
>> Maarten
>>
>>
>> On Thursday, June 5, 2014 4:31:20 PM, David Gobbi <david.gobbi at gmail.com>
>> wrote:
>>
>>
>> An unresolved symbol just means that you have to link to the library,
>> e.g. if you have a target_link_libraries() call in your CMakeLists.txt,
>> make sure that "vtksys" is listed.
>>
>> On Thu, Jun 5, 2014 at 2:20 PM, Maarten Beek <beekmaarten at yahoo.com>
>> wrote:
>>> Hi David,
>>>
>>> Thanks for the quick reply.
>>>
>>> Sounds complicated, but I'll browse through the windows docs.
>>>
>>> In my search for a solution I also bumped into
>>> vtksys::Encoding::ToNarrow(),
>>> however this gives me an 'unresolved external symbol' link error. I have
>>> never used stuff in vtksys (and similar libs like vtkpng, vtktiff)
>>> before,
>>> so I am not really sure I am supposed to, i.e., these are just functions
>>> used by cmake and/or in just the vtk build.
>>>
>>> Maarten
>>>
>>>
>>> On Thursday, June 5, 2014 3:44:46 PM, David Gobbi <david.gobbi at gmail.com>
>>> wrote:
>>>
>>>
>>> Hi Maarten,
>>>
>>> VTK just uses C++ streams in most of its readers/writers.  On OS X,
>>> you'll find that you can use utf-8 filenames just fine.  Same for linux,
>>> for the most part at least.
>>>
>>> For Windows, you'd have to set the codepage to 65001 (utf-8).  I've
>>> done this successfully for console I/O (via SetConsoleOutputCP()),
>>> but you'll have to look through the Windows docs to see what function
>>> is needed to change the codepage used by CreateFileA.
>>>
>>> - David
>>>
>>>
>>> On Thu, Jun 5, 2014 at 1:17 PM, Maarten Beek <beekmaarten at yahoo.com>
>>> wrote:
>>>> Hi all,
>>>>
>>>> I was wondering if there is a multi-platform way of loading a file (e.g.
>>>> tif, stl) with chinese, russian characters in the file path in VTK.
>>>> How would I build VTK with Unicode characters?
>>>> Can I use a non-unicode VTK in a unicode app?
>>>>
>>>> Thanks - Maarten
>>>
>>>
>>
>>
>
>


More information about the vtkusers mailing list