<div dir="ltr">Thanks, but I can't really use the SharpProj way. It's kinda using the .NET string as an intermediary. Plus I need to support a Linux build so I can't use C++/CLI anyway. The utf_8string method that takes in the .NET string works kinda similar to doing this w/o it:<div>std::string utf8_string(String^ v)<br>{<br>    std::wstring_convert<std::codecvt_utf8_utf16<wchar_t>> conv;<br>    pin_ptr<const wchar_t> pPath = PtrToStringChars(v);<br>    std::wstring vstr(pPath);<br>    std::string sstr(conv.to_bytes(vstr));<br>    return sstr;<br>}<br><div>const char* convertResult4(const char* result) {<br>    if (!result)<br>        return result;<br><br>    std::wstring_convert<std::codecvt_utf8_utf16<wchar_t>> conv;<br>    std::wstring str = conv.from_bytes(result);<br>    std::string sstr(conv.to_bytes(str));<br>    ...<br>}<br></div></div><div><br></div><div>The std::wstring str contains the correctly encoded string, but turning it back to a const char* using std::string sstr.c_str() just garbles it back again.</div><div><br></div><div>I might have to just proxy everything over the managed/unmanaged pinvoke wall as a wchar_t* or just make everything IntPtrs and Marshal them that way.</div><div><br></div><div><br></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Thu, Apr 6, 2023 at 10:32 AM Bert Huijben <<a href="mailto:bert@qqmail.nl">bert@qqmail.nl</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div class="msg-7321749025325822424"><div lang="NL" style="overflow-wrap: break-word;"><div class="m_-7321749025325822424WordSection1"><p class="MsoNormal"><span>                Hi Peter,<u></u><u></u></span></p><p class="MsoNormal"><span><u></u> <u></u></span></p><p class="MsoNormal"><span lang="EN-US">When I needed proj for my work on my previous day-job, I spend a bit extra time and created a complete wrapping C# library that is still used there and a few other places. The wrapping is specifically targeted towards Windows, but works there with .Net Framework and .Net core. See <a href="https://github.com/ampscm/sharpproj/" target="_blank">https://github.com/ampscm/sharpproj/</a> (or just use SharpProj from NuGet)<u></u><u></u></span></p><p class="MsoNormal"><span lang="EN-US"><u></u> <u></u></span></p><p class="MsoNormal"><span lang="EN-US"><u></u> <u></u></span></p><p class="MsoNormal"><span lang="EN-US">The sample code I have on that page shows +- what you try here, so you should be able to use that to try your use-cases around encoding.<u></u><u></u></span></p><p class="MsoNormal"><span lang="EN-US"><u></u> <u></u></span></p><p class="MsoNormal"><span lang="EN-US">[[<u></u><u></u></span></p><p class="MsoNormal"><span lang="EN-US">using SharpProj;<u></u><u></u></span></p><p class="MsoNormal"><span lang="EN-US"><u></u> <u></u></span></p><p class="MsoNormal"><span lang="EN-US">using var rd = CoordinateReferenceSystem.CreateFromEpsg(28992);<u></u><u></u></span></p><p class="MsoNormal"><span lang="EN-US">using var wgs84 = CoordinateReferenceSystem.CreateFromEpsg(4326);<u></u><u></u></span></p><p class="MsoNormal"><span lang="EN-US"><u></u> <u></u></span></p><p class="MsoNormal"><span lang="EN-US">var area = rd.UsageArea;<u></u><u></u></span></p><p class="MsoNormal"><span lang="EN-US">Assert.AreEqual("Netherlands - onshore, including Waddenzee, Dutch Wadden Islands and 12-mile offshore coastal zone.", area.Name);<u></u><u></u></span></p><p class="MsoNormal"><span lang="EN-US"><u></u> <u></u></span></p><p class="MsoNormal"><span lang="EN-US">using (var t = CoordinateTransform.Create(rd, wgs84))<u></u><u></u></span></p><p class="MsoNormal"><span lang="EN-US">{<u></u><u></u></span></p><p class="MsoNormal"><span lang="EN-US">    var r = t.Apply(new PPoint(155000, 463000));<u></u><u></u></span></p><p class="MsoNormal"><span lang="EN-US">    Assert.AreEqual(new PPoint(52.155, 5.387), r.ToXY(3)); // Round to 3 decimals for easy testing<u></u><u></u></span></p><p class="MsoNormal"><span lang="EN-US">}<u></u><u></u></span></p><p class="MsoNormal"><span lang="EN-US">]]<u></u><u></u></span></p><p class="MsoNormal"><span lang="EN-US"><u></u> <u></u></span></p><p class="MsoNormal"><span lang="EN-US">If you pick EPSG 23031, you will see that the encodings work there.<u></u><u></u></span></p><p class="MsoNormal"><span lang="EN-US"><u></u> <u></u></span></p><p class="MsoNormal"><span lang="EN-US"><u></u> <u></u></span></p><p class="MsoNormal"><span lang="EN-US">You can check all the sourcecode too, if you just want to check how to get the en-/decoding to work. (It is all Apache licensed, so feel free to copy&paste… or provide pull requests if you want something added to the library)<u></u><u></u></span></p><p class="MsoNormal"><span lang="EN-US"><u></u> <u></u></span></p><p class="MsoNormal"><span lang="EN-US">                Bert<u></u><u></u></span></p><p class="MsoNormal"><span lang="EN-US"><u></u> <u></u></span></p><p class="MsoNormal"><span lang="EN-US"><u></u> <u></u></span></p><p class="MsoNormal"><span lang="EN-US"><u></u> <u></u></span></p><div><div style="border-right:none;border-bottom:none;border-left:none;border-top:1pt solid rgb(225,225,225);padding:3pt 0cm 0cm"><p class="MsoNormal"><b><span lang="EN-US">From:</span></b><span lang="EN-US"> PROJ <<a href="mailto:proj-bounces@lists.osgeo.org" target="_blank">proj-bounces@lists.osgeo.org</a>> <b>On Behalf Of </b>Even Rouault<br><b>Sent:</b> Wednesday, April 5, 2023 11:53 PM<br><b>To:</b> Peter Townsend <<a href="mailto:peter.townsend@maplarge.com" target="_blank">peter.townsend@maplarge.com</a>>; proj <<a href="mailto:proj@lists.osgeo.org" target="_blank">proj@lists.osgeo.org</a>><br><b>Subject:</b> Re: [PROJ] PROJ and Unicode on Windows<u></u><u></u></span></p></div></div><p class="MsoNormal"><u></u> <u></u></p><p>Peter,<u></u><u></u></p><p>there isn't any issue in your build. It is just that PROJ returns UTF-8 encoded strings and that the typical Windows console isn't configured to display UTF-8. Cf <a href="https://stackoverflow.com/questions/57131654/using-utf-8-encoding-chcp-65001-in-command-prompt-windows-powershell-window" target="_blank">https://stackoverflow.com/questions/57131654/using-utf-8-encoding-chcp-65001-in-command-prompt-windows-powershell-window</a> or similar issues<u></u><u></u></p><p>Even<u></u><u></u></p><div><p class="MsoNormal">Le 05/04/2023 à 23:44, Peter Townsend via PROJ a écrit :<u></u><u></u></p></div><blockquote style="margin-top:5pt;margin-bottom:5pt"><div><div><p class="MsoNormal">I've got a bit of an annoyance with my windows proj build. Hopefully it's not too hard to resolve as the world of char/wchar_t/etc. isn't something I'm terribly familiar with.<u></u><u></u></p></div><div><p class="MsoNormal"><u></u> <u></u></p></div><div><p class="MsoNormal">Take for example the area of use of EPSG:23031. On Linux it's fine, but on windows there's a unicode issue.<u></u><u></u></p></div><div><p class="MsoNormal"><u></u> <u></u></p></div><div><p class="MsoNormal">PJ* crs = proj_create(m_ctxt, "EPSG:23031");<br>ASSERT_NE(crs, nullptr);<br>ObjectKeeper keeper_crsH(crs);<br><br>double w, s, e, n;<br>const char* a;<br>proj_get_area_of_use(m_ctxt, crs, &w, &s, &e, &n, &a);<u></u><u></u></p></div><div><p class="MsoNormal"><u></u> <u></u></p></div><div><p class="MsoNormal">Contents of a:<u></u><u></u></p></div><p class="MsoNormal">"Europe - between 0°E and 6°E - Andorra; Denmark (North Sea); Germany offshore; Netherlands offshore; Norway including Svalbard - onshore and offshore; Spain - onshore (mainland and Balearic Islands); United Kingdom (UKCS) offshore."<br clear="all"><u></u><u></u></p><div><p class="MsoNormal"><u></u> <u></u></p></div><div><p class="MsoNormal">Is there a simple thing I'm overlooking in the build process that might clear up the encoding goof? Or do I need to do some bending over backwards with character manipulation?<u></u><u></u></p></div><div><p class="MsoNormal"><u></u> <u></u></p></div><div><p class="MsoNormal">This is the command line I'm using to build this example:<u></u><u></u></p></div><div><p class="MsoNormal">cmake -DBUILD_SHARED_LIBS=ON -DCMAKE_TOOLCHAIN_FILE=C:\dev\vcpkg\scripts\buildsystems\vcpkg.cmake ..<br>cmake --build . --config Debug -j 8<u></u><u></u></p></div><div><p class="MsoNormal"><u></u> <u></u></p></div><div><p class="MsoNormal">Thanks!<u></u><u></u></p></div><p class="MsoNormal"><span class="m_-7321749025325822424gmailsignatureprefix">-- </span><u></u><u></u></p><div><div><div><p class="MsoNormal">Peter Townsend<u></u><u></u></p></div><p class="MsoNormal">Senior Software Developer<u></u><u></u></p></div></div></div><p class="MsoNormal"><br><br><u></u><u></u></p><pre>_______________________________________________<u></u><u></u></pre><pre>PROJ mailing list<u></u><u></u></pre><pre><a href="mailto:PROJ@lists.osgeo.org" target="_blank">PROJ@lists.osgeo.org</a><u></u><u></u></pre><pre><a href="https://lists.osgeo.org/mailman/listinfo/proj" target="_blank">https://lists.osgeo.org/mailman/listinfo/proj</a><u></u><u></u></pre></blockquote><pre>-- <u></u><u></u></pre><pre><a href="http://www.spatialys.com" target="_blank">http://www.spatialys.com</a><u></u><u></u></pre><pre>My software is free, but my time generally not.<u></u><u></u></pre></div></div></div></blockquote></div><br clear="all"><div><br></div><span class="gmail_signature_prefix">-- </span><br><div dir="ltr" class="gmail_signature"><div dir="ltr"><div>Peter Townsend<br></div>Senior Software Developer<br></div></div>