{"id":1999,"date":"2026-08-28T13:36:16","date_gmt":"2026-08-28T13:36:16","guid":{"rendered":"https:\/\/clarionsharp.com\/blog\/?p=1999"},"modified":"2026-08-28T13:36:16","modified_gmt":"2026-08-28T13:36:16","slug":"clarion-unicode-preview-refreshed-beta-build-14234","status":"publish","type":"post","link":"https:\/\/clarionsharp.com\/blog\/clarion-unicode-preview-refreshed-beta-build-14234\/","title":{"rendered":"Clarion Unicode preview \u2014 refreshed beta build (14234)"},"content":{"rendered":"\n<style>\n.ustring-wp3 { --u-fg:#1c1917; --u-muted:#6b6560; --u-line:#e2dcd3; --u-card:#fff; --u-soft:#fef3c7; --u-accent:#b45309; --u-bg:#f7f5f1; --u-link:#0b5cad; font-family:system-ui,-apple-system,\"Segoe UI\",sans-serif; color:var(--u-fg); line-height:1.55; max-width:1080px; margin:0 auto; }\n@media (prefers-color-scheme: dark) {\n  .ustring-wp3 { --u-fg:#f5f5f4; --u-muted:#a8a29e; --u-line:#3f3a36; --u-card:#1c1917; --u-soft:#422006; --u-accent:#fbbf24; --u-bg:#121110; --u-link:#7dd3fc; }\n}\n.ustring-wp3 * { box-sizing:border-box; }\n.ustring-wp3 .uw-hero { background:linear-gradient(135deg,#1e2a4a 0%,#283a5e 45%,#431407 100%); color:#fafaf9; border-radius:14px; padding:1.75rem 1.5rem 1.5rem; margin:0 0 1.25rem; }\n.ustring-wp3 .uw-eyebrow { display:inline-block; font-size:.72rem; letter-spacing:.12em; text-transform:uppercase; color:#fbbf24; font-weight:700; margin-bottom:.55rem; }\n.ustring-wp3 .uw-hero h2 { margin:0 0 .65rem; font-size:clamp(1.45rem,3.5vw,2rem); line-height:1.2; letter-spacing:-.02em; color:#fafaf9; }\n.ustring-wp3 .uw-hero p { margin:0; color:#e7e5e4; font-size:1.05rem; max-width:42rem; }\n.ustring-wp3 .uw-pills { display:flex; flex-wrap:wrap; gap:.4rem; margin-top:1rem; }\n.ustring-wp3 .uw-pill { display:inline-block; padding:.3rem .7rem; border-radius:999px; background:rgba(255,255,255,.08); border:1px solid rgba(255,255,255,.12); color:#fafaf9; font-size:.82rem; }\n.ustring-wp3 .uw-pill strong { color:#fde68a; font-weight:650; }\n.ustring-wp3 .uw-lead { color:var(--u-muted); margin:0 0 1.1rem; font-size:1rem; }\n.ustring-wp3 .uw-grid { display:grid; grid-template-columns:repeat(auto-fit,minmax(230px,1fr)); gap:.85rem; margin:0 0 1.5rem; }\n.ustring-wp3 .uw-card { background:var(--u-card); border:1px solid var(--u-line); border-radius:14px; padding:1rem 1.05rem 1.1rem; }\n.ustring-wp3 .uw-icon { width:2rem; height:2rem; border-radius:10px; display:grid; place-items:center; background:var(--u-soft); color:var(--u-accent); font-weight:700; margin-bottom:.55rem; font-size:1rem; }\n.ustring-wp3 .uw-card h3 { margin:0 0 .35rem; font-size:1rem; letter-spacing:-.01em; color:var(--u-fg); }\n.ustring-wp3 .uw-card p { margin:0; color:var(--u-muted); font-size:.92rem; line-height:1.5; }\n.ustring-wp3 code { font-family:Consolas,\"Cascadia Mono\",ui-monospace,monospace; font-size:.88em; background:var(--u-bg); border:1px solid var(--u-line); border-radius:5px; padding:.05em .3em; color:var(--u-fg); }\n.ustring-wp3 .uw-cta { background:var(--u-card); border:1px solid var(--u-line); border-left:4px solid var(--u-accent); border-radius:12px; padding:1rem 1.15rem; }\n.ustring-wp3 .uw-cta p { margin:0 0 .65rem; color:var(--u-muted); }\n.ustring-wp3 .uw-cta p:last-child { margin:0; }\n.ustring-wp3 .uw-btn { display:inline; background:none; color:var(--u-link) !important; text-decoration:underline !important; font-weight:650; padding:0; border-radius:0; margin-top:.15rem; }\n.ustring-wp3 .uw-btn:hover { color:var(--u-accent) !important; text-decoration:underline !important; }\n.ustring-wp3 .uw-note { font-size:.88rem; color:var(--u-muted); margin-top:.75rem; }\n<\/style>\n\n<div class=\"ustring-wp3\">\n  <div class=\"uw-hero\">\n    <div class=\"uw-eyebrow\">Clarion \u00b7 Unicode Preview \u00b7 Beta Refresh<\/div>\n    <h2>Refresh build 14234 \u2014 Unicode file names end to end, Unicode PDF, and a previewer for wide windows<\/h2>\n    <p>\n      Everything in this refresh traces back to a beta thread. The whole file-name family\n      went wide \u2014 <code>EXISTS<\/code>, <code>COPY<\/code>\/<code>RENAME<\/code>\/<code>REMOVE<\/code>,\n      <code>FILE,NAME(ustring)<\/code>, <code>DIRECTORY()<\/code> with 64-bit sizes and\n      <code>FILEDIALOG()<\/code>; both PDF targets export real Unicode text; the Window\n      Previewer previews a window as a wide program; keystrokes, clipboard and tooltips\n      carry Unicode; the dictionary lives as text. Already testing? Everything below is new\n      since build 14204.\n    <\/p>\n    <div class=\"uw-pills\">\n      <span class=\"uw-pill\"><strong>Files<\/strong> EXISTS \u00b7 COPY\/RENAME\/REMOVE \u00b7 FILE,NAME \u00b7 DIRECTORY \u00b7 FILEDIALOG<\/span>\n      <span class=\"uw-pill\"><strong>Reports<\/strong> PDF Unicode (both targets) \u00b7 encryption fix<\/span>\n      <span class=\"uw-pill\"><strong>IDE<\/strong> Unicode Preview \u00b7 dictionary as text \u00b7 Reload Solution<\/span>\n    <\/div>\n  <\/div>\n\n  <p class=\"uw-lead\">\n    Highlights of this drop \u2014 then the full tester guide, whose\n    <em>&#8220;What&#8217;s new&#8221;<\/em> section and dated <em>&#8220;beta refresh&#8221;<\/em> markers flag\n    exactly what changed since you last read it.\n  <\/p>\n\n  <div class=\"uw-grid\">\n    <article class=\"uw-card\">\n      <div class=\"uw-icon\">\u2261<\/div>\n      <h3>Unicode file names, end to end<\/h3>\n      <p>\n        A file name or folder outside the Windows codepage \u2014 a Unicode user profile, a currency sign, CJK \u2014 now works through the whole family: <code>EXISTS()<\/code>, <code>COPY()<\/code>\/<code>RENAME()<\/code>\/<code>REMOVE()<\/code>, and <code>FILE,NAME(ustring)<\/code> on TopSpeedW and the DOS\/ASCII\/BASIC drivers (every driver takes a USTRING name whose text fits the codepage; the classic drivers report error 45 instead of a silent 90). \n      <\/p>\n    <\/article>\n\n    <article class=\"uw-card\">\n      <div class=\"uw-icon\">\u2302<\/div>\n      <h3>DIRECTORY() with Unicode names and 64-bit sizes; FILEDIALOG goes wide<\/h3>\n      <p>\n        A new queue type <code>FILE:QueueW<\/code> \u2014 <code>Name USTRING<\/code>, <code>Size REAL<\/code> (exact past 2&nbsp;GB), <code>Attrib32<\/code> \u2014 lists every name with its real characters; the old queues are untouched. <code>FILEDIALOG()<\/code> with a USTRING variable opens on a non-codepage path and returns it exactly, and a USTRING title shows as typed. \n      <\/p>\n    <\/article>\n\n    <article class=\"uw-card\">\n      <div class=\"uw-icon\">\u2399<\/div>\n      <h3>PDF export is Unicode \u2014 both targets<\/h3>\n      <p>\n        The stock <em>Report to PDF<\/em> target embeds a glyph-preserving subset of each font so a <code>REPORT,UNICODE<\/code>&#8216;s text renders, searches and copies in any reader; Image2PDF does the same through libharu, color emoji included as pictures. Password-protected PDF export \u2014 is fixed.\n      <\/p>\n    <\/article>\n\n    <article class=\"uw-card\">\n      <div class=\"uw-icon\">\u25ad<\/div>\n      <h3>Window Previewer: a latched &#8220;Unicode Preview&#8221; button<\/h3>\n      <p>\n        Next to the Preview button (and in the Window menu): latched on, the next preview is generated as a <em>wide<\/em> program \u2014 every substituted USE variable a USTRING \u2014 so the preview runs the real wide ENTRY\/TEXT\/LIST classes. Latched off, the generated program is byte-identical to today&#8217;s. \n      <\/p>\n    <\/article>\n\n    <article class=\"uw-card\">\n      <div class=\"uw-icon\">&#x2328;<\/div>\n      <h3>Unicode keystrokes reach USTRING controls exactly<\/h3>\n      <p>\n        The runtime pump is wide: Win+. emoji, IME composition and any injected Unicode keystroke land in a USTRING ENTRY\/TEXT as typed; ANSI windows keep their ANSI keystrokes by construction. <code>CLIPBOARD()<\/code>\/<code>SETCLIPBOARD()<\/code> carry Unicode, and tooltips are wide on every lane.\n      <\/p>\n    <\/article>\n\n    <article class=\"uw-card\">\n      <div class=\"uw-icon\">\u2263<\/div>\n      <h3>The dictionary as text<\/h3>\n      <p>\n        A <code>.dctx<\/code> twin beside the <code>.dct<\/code> is the source of truth: honest UTF-8 (a <code>\u00a3<\/code> in a picture, a <code>\u03a9<\/code> in a prompt survive the round trip), Dictionary-menu export\/import, and an audit of who changed what. Reload\/Close Solution no longer revert an external <code>.sln<\/code>\/<code>.cwproj<\/code> edit.\n      <\/p>\n    <\/article>\n\n    <article class=\"uw-card\">\n      <div class=\"uw-icon\">\u0192<\/div>\n      <h3>UVAL(), PROP:ClipEntry, compiler messages restored<\/h3>\n      <p>\n        <code>UVAL(string [,pos])<\/code> is the inverse of <code>UCHR()<\/code> \u2014 the code point at a unit position, merging a surrogate pair. <code>SYSTEM{PROP:ClipEntry}<\/code> (opt-in) clips typed trailing spaces from <code>@S<\/code> entries into CSTRING\/USTRING. \n      <\/p>\n    <\/article>\n\n    <article class=\"uw-card\">\n      <div class=\"uw-icon\">\u2637<\/div>\n      <h3>LIST and TEXT: the last residuals closed<\/h3>\n      <p>\n        Declared <code>FORMAT()<\/code> headers <em>and<\/em> column pictures keep their Unicode, the string <code>FROM()<\/code> lane is wide both ways, <code>{PROP:Text}<\/code> into a TEXT stores exact units, and TopScan previews a UNICODE blob as text. The LIST family is fully wide on declared and runtime lanes.\n      <\/p>\n    <\/article>\n\n    <article class=\"uw-card\">\n      <div class=\"uw-icon\">\u229e<\/div>\n      <h3>Oracle driver goes wide<\/h3>\n      <p>\n        <code>NCHAR<\/code>\/<code>NVARCHAR2<\/code> import as USTRING sized in units, <code>NCLOB<\/code> as a Unicode blob, DDL emits <code>VARCHAR2(n CHAR)<\/code>\/<code>NVARCHAR2(n-1)<\/code> \u2014 and three long-shipped defects went with it. Set <code>NLS_LANG<\/code> to a Unicode-capable character set on Instant Client.\n      <\/p>\n    <\/article>\n\n    <article class=\"uw-card\">\n      <div class=\"uw-icon\">?<\/div>\n      <h3>F1 help, current for this drop<\/h3>\n      <p>\n        The IDE help (ClarionHelp.chm) updated with the new RTL features: <code>DIRECTORY<\/code>\/<code>FILEDIALOG<\/code> with <code>FILE:QueueW<\/code>, the previewer&#8217;s Unicode Preview, the PDF targets&#8217; Unicode notes, <code>UVAL<\/code>, <code>PROP:ClipEntry<\/code> and the updated compiler messages.\n      <\/p>\n    <\/article>\n  <\/div>\n\n  <div class=\"uw-cta\">\n    <p>\n      <strong style=\"color:var(--u-fg)\">Full tester guide<\/strong> \u2014\n      mental model, conversion rules, DCT import table, screen controls, reports, blobs,\n      SQL \/ SQLite \/ text drivers \/ TopSpeedW \/ Memory \/ IP, recipes, and what to focus\n      on when testing. The guide&#8217;s <em>&#8220;What&#8217;s new&#8221;<\/em> section lists everything in this\n      drop; changes are also flagged inline with dated <em>&#8220;beta refresh&#8221;<\/em> notes.\n    <\/p>\n    <!-- >>> confirm these URLs match the deployed static docs <<< -->\n    <a class=\"uw-btn\" href=\"https:\/\/softvelocity.com\/docs\/Clarion-Unicode-Tester-Guide.html\" target=\"_blank\" rel=\"noopener\">Open the full Unicode Tester Guide<\/a>\n    <p style=\"margin:.85rem 0 .35rem; color:var(--u-muted)\">\n      <strong style=\"color:var(--u-fg)\">Report tool authors<\/strong> \u2014\n      the wide generator surface has shipped (<code>IReportGeneratorW<\/code> \u2014 six\n      methods, opt-in, zero break for existing implementors). Format detection, the\n      EMF record set, transition paths per integration style:\n    <\/p>\n    <a class=\"uw-btn\" href=\"https:\/\/softvelocity.com\/docs\/Clarion-Unicode-EMF-Transition-Note.html\" target=\"_blank\" rel=\"noopener\">EMF Page Files \u2014 Transition Note<\/a>\n    <p class=\"uw-note\">\n      Standalone pages (best full-width). Everything described there is implemented unless marked as a known limitation \u2014\n      different behavior is exactly what we want to hear about.\n    <\/p>\n  <\/div>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Clarion 12 beta refresh<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[43,5],"tags":[57,56,47],"class_list":["post-1999","post","type-post","status-publish","format-standard","hentry","category-clarion-12","category-clarionnews","tag-beta","tag-clarion12","tag-unicode"],"_links":{"self":[{"href":"https:\/\/clarionsharp.com\/blog\/wp-json\/wp\/v2\/posts\/1999","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/clarionsharp.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/clarionsharp.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/clarionsharp.com\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/clarionsharp.com\/blog\/wp-json\/wp\/v2\/comments?post=1999"}],"version-history":[{"count":2,"href":"https:\/\/clarionsharp.com\/blog\/wp-json\/wp\/v2\/posts\/1999\/revisions"}],"predecessor-version":[{"id":2001,"href":"https:\/\/clarionsharp.com\/blog\/wp-json\/wp\/v2\/posts\/1999\/revisions\/2001"}],"wp:attachment":[{"href":"https:\/\/clarionsharp.com\/blog\/wp-json\/wp\/v2\/media?parent=1999"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/clarionsharp.com\/blog\/wp-json\/wp\/v2\/categories?post=1999"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/clarionsharp.com\/blog\/wp-json\/wp\/v2\/tags?post=1999"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}