@@ -560,6 +560,93 @@ test.describe("Prerendering", () => {
560
560
) ;
561
561
} ) ;
562
562
563
+ test ( "Handles UTF-8 characters in prerendered and non-prerendered routes" , async ( {
564
+ page,
565
+ } ) => {
566
+ fixture = await createFixture ( {
567
+ prerender : false ,
568
+ files : {
569
+ ...files ,
570
+ "vite.config.ts" : js `
571
+ import { defineConfig } from "vite";
572
+ import { reactRouter } from "@react-router/dev/vite";
573
+
574
+ export default defineConfig({
575
+ build: { manifest: true },
576
+ plugins: [
577
+ reactRouter({
578
+ prerender: ["/", "/utf8-prerendered"],
579
+ })
580
+ ],
581
+ });
582
+ ` ,
583
+ "app/routes/utf8-prerendered.tsx" : js `
584
+ import { useLoaderData } from 'react-router';
585
+ export function loader({ request }) {
586
+ return {
587
+ prerendered: request.headers.has('X-React-Router-Prerender') ? 'yes' : 'no',
588
+ data: "한글 데이터 - UTF-8 문자",
589
+ };
590
+ }
591
+
592
+ export default function Comp() {
593
+ let data = useLoaderData();
594
+ return (
595
+ <>
596
+ <h1 data-title>UTF-8 Prerendered</h1>
597
+ <p data-prerendered>{data.prerendered}</p>
598
+ <p data-content>{data.data}</p>
599
+ </>
600
+ );
601
+ }
602
+ ` ,
603
+ "app/routes/utf8-not-prerendered.tsx" : js `
604
+ import { useLoaderData } from 'react-router';
605
+ export function loader({ request }) {
606
+ return {
607
+ prerendered: request.headers.has('X-React-Router-Prerender') ? 'yes' : 'no',
608
+ data: "非プリレンダリングデータ - UTF-8文字",
609
+ };
610
+ }
611
+
612
+ export default function Comp() {
613
+ let data = useLoaderData();
614
+ return (
615
+ <>
616
+ <h1 data-title>UTF-8 Not Prerendered</h1>
617
+ <p data-prerendered>{data.prerendered}</p>
618
+ <p data-content>{data.data}</p>
619
+ </>
620
+ );
621
+ }
622
+ ` ,
623
+ } ,
624
+ } ) ;
625
+ appFixture = await createAppFixture ( fixture ) ;
626
+
627
+ let app = new PlaywrightFixture ( appFixture , page ) ;
628
+
629
+ // Test prerendered route with UTF-8 characters
630
+ await app . goto ( "/utf8-prerendered" ) ;
631
+ await page . waitForSelector ( "[data-mounted]" ) ;
632
+ expect ( await app . getHtml ( "[data-title]" ) ) . toContain ( "UTF-8 Prerendered" ) ;
633
+ expect ( await app . getHtml ( "[data-prerendered]" ) ) . toContain ( "yes" ) ;
634
+ expect ( await app . getHtml ( "[data-content]" ) ) . toContain (
635
+ "한글 데이터 - UTF-8 문자"
636
+ ) ;
637
+
638
+ // Test non-prerendered route with UTF-8 characters
639
+ await app . goto ( "/utf8-not-prerendered" ) ;
640
+ await page . waitForSelector ( "[data-mounted]" ) ;
641
+ expect ( await app . getHtml ( "[data-title]" ) ) . toContain (
642
+ "UTF-8 Not Prerendered"
643
+ ) ;
644
+ expect ( await app . getHtml ( "[data-prerendered]" ) ) . toContain ( "no" ) ;
645
+ expect ( await app . getHtml ( "[data-content]" ) ) . toContain (
646
+ "非プリレンダリングデータ - UTF-8文字"
647
+ ) ;
648
+ } ) ;
649
+
563
650
test ( "Renders down to the proper HydrateFallback" , async ( { page } ) => {
564
651
fixture = await createFixture ( {
565
652
prerender : true ,
0 commit comments